如何在连接到数据库之前在运行时获取数据库密码

时间:2013-04-19 06:26:46

标签: java

在我的applicationcontext.xml中我有这个:

       <bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/dashboardsupervisor" />
    <property name="username" value="root" />
    <property name="password" value="1234" />
</bean>

这里我正在连接我的数据库:

              ApplicationContext ctx = new ClassPathXmlApplicationContext(
        "applicationContext.xml");
        MySQLRdbHelper rdbHelper = (MySQLRdbHelper)  
                    ctx.getBean("ManagerSupervisor");

我想要的是不要从我的applicationcontext.xml中读取密码“1234” 并从我本地驱动器中的某些属性文件中读取它。 因为它将在不同的机器上运行,并且每个机器都有不同的密码。

我能实现吗?

感谢

3 个答案:

答案 0 :(得分:5)

是的,你可以,而关键是Springs PropertyPlaceholderConfigurer

例如,您在文件系统上创建一个名为database.properties的文件,其中包含您的密码(注意,您还可以向此文件添加更多设置,如用户名,JDBC网址等)。

jdbc.password=1234

接下来,您需要声明一个PropertyPlaceholderConfigurer bean并将其指向database.properties文件:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>path/to/database.properties</value>
    </property>
</bean>

请注意,路径被解释为类路径资源,除非它以file:为前缀。

最后,替换 dataSource bean的配置:replace

<property name="password" value="1234" />

<property name="password" value="${jdbc.password}" />

答案 1 :(得分:0)

您可以使用个人资料:

 GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
 ctx.getEnvironment().setActiveProfiles("dev1");
 ctx.load("*Context.xml");
 ctx.refresh();

 <bean id="database1" profile="dev1"/>
 <bean id="database2" profile="dev2">

答案 2 :(得分:0)

最好的方法是在应用程序服务器中创建数据源,并在application.xml

中进行如下配置
  <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
     <property name="jndiName"><value>YourDSName</value></property>
  </bean>

  <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
        <ref bean="dataSource" />
    </property>
      .....
   </bean>