代码之家  ›  专栏  ›  技术社区  ›  Patrick

用Java Web应用程序(Web.xml)部署数据库配置(用户名/密码)的最佳实践是什么?

  •  2
  • Patrick  · 技术社区  · 14 年前

    我有一个使用标准Web.xml和servlet的Java Web应用程序。目前,我正在使用 <context-param> web.xml中用于定义数据库配置(JDBC URL、用户名、密码等)的标记。这些是由一个servlet在它的 init() 方法。

    但我不想在我的源存储库中包含数据库用户名/密码。

    为了测试,我使用的是JettyMaven插件。有了它,我指定了一个选项 overrideDescriptor 在主web.xml之后应用补充web.xml。我把我的测试数据库配置放在这个补充文件中,一切都很好。

    对于部署,我的主机正在使用Tomcat。我不知道如何在这里应用数据库配置。是否有类似的方法来指定补充的web.xml文件?如果没有,最好的做法是什么?是否从作为资源包含的单独属性文件(或类似文件)中读取配置?

    4 回复  |  直到 12 年前
        1
  •  8
  •   duffymo    14 年前

    您应该使用连接池和JNDI。您将凭证保存在服务器上。用户只需要jndi查找名称(例如“jdbc/foodatasource”)即可访问连接池。

        2
  •  1
  •   Rodney Gitzel    14 年前

    “是否从作为资源包含的单独属性文件(或类似文件)中读取配置?”

    对.

    还有很多方法可以做到这一点。我当前的项目使用Spring的 PropertyPlaceholderConfigurer 读取适当的属性文件并允许在上下文文件中使用任何值 ${whatever} 符号。

    添加:

    顺便说一下,我们使用 属性占位符配置器 设置文件的位置。我们使用适用于所有环境(dev、test、uat、prod)的“全局”属性文件,然后为覆盖全局设置的每个环境使用一个文件。

    文件本身部署在JAR中,但我们不需要动态更改值的灵活性。

        3
  •  0
  •   matt b    14 年前

    您可以始终将配置存储在外部 .properties 文件,将servlet改为从该文件读取(可能将web.xml指向该文件的路径),从而使该文件仅位于服务器上,不受源代码控制。

        4
  •  0
  •   zawhtut    12 年前

    在你的 应用程序上下文.xml ,可以使用占位符并将占位符参数的位置指向外部属性文件。

    <bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location">
           <value>/WEB-INF/database-config.properties</value>
        </property>
    </bean>
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    

    在database-config.properties文件中。您可以提供占位符的参数。在这种情况下,数据库设置。

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=UTF-8
    jdbc.user=root
    jdbc.password=root