代码之家  ›  专栏  ›  技术社区  ›  jr. Aikon Mogwai

在何处存储Spring应用程序中的数据库密码或使用JNDI?

  •  2
  • jr. Aikon Mogwai  · 技术社区  · 16 年前

    似乎是个简单的任务。我有一个需要数据库连接的webapp。我希望能够在此应用服务器上删除更新的.war文件并加载新版本,而不必重新编辑applicationconfig.xml文件来指定用于生产的数据库连接参数。

    使用容器设置数据源,然后从JNDI引用它是首选的方式吗?我认为在spring.xml文件中定义所有的密码会更干净,但是我不能想出一个干净的方法,在我们推出新版本时,只允许设置一次生产密码。

    那么,如何在Spring应用程序中指定数据库连接信息,以便在不必重新编辑文件的情况下对其进行升级?

    如果您使用JNDI,由于JNDI在容器外不可用,那么如何处理测试的设置?

    谢谢!

    2 回复  |  直到 16 年前
        1
  •  2
  •   axtavt    16 年前

    外部化数据库连接属性的典型方法是将它们存储在 .properties 文件和加载使用 <context:property-placeholder .../> . 那么你可以有不同的 性能 用于测试和生产的文件。

    如果选择JNDI,可以使用弹簧 mock JNDI support 用于测试。

        2
  •  0
  •   toolkit    16 年前

    一种方法是将您的Spring配置文件 composed 与应用程序中的特定层相关的片段。

    这样的一个片段可以包含您的数据源定义。对于生产,此片段将使用 jee:jndi-lookup . 然后对于测试,有一个不同的片段将使用 DriverManagerDataSource ?

    更新:

    如果您希望在部署后更改数据源,那么可以使用此技术,并使用PropertyPlaceholderConfigurer更改将哪个数据源注入到其他bean中,如旧的 post 我写

    如:

    <bean class="foo.bar.SomeClassNeedingDataSource"">
        <property name="dataSource" ref="${the.datasource.to.inject}" />
    </bean>
    
    <jee:jndi-lookup id="jndiDataSource" ... />
    
    <bean id="driverManagerDataSource" 
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        ...
    </bean>
    
    # the properties file
    the.datasource.to.inject = jndiDataSource
    #the.datasource.to.inject = driverManagerDataSource