我有一个web应用程序,其中在persistence.xml中定义了数据库连接属性。
我正在使用包含管理器持久性,并使用@PersistenceContext注入的实体管理器。
今天,DB的密码在persistence.xml文件中,但我宁愿在运行时设置它(向用户询问)。
我能够使用运行时密码创建新的EntityManager,但是如何“覆盖”已注入的EntityManager呢?
还有其他好的想法/方法吗?
我有一个web应用程序,其中在persistence.xml中定义了数据库连接属性。
我正在使用包含管理器持久性,并使用@PersistenceContext注入的实体管理器。
今天,DB的密码在persistence.xml文件中,但我宁愿在运行时设置它(向用户询问)。
我能够使用运行时密码创建新的EntityManager,但是如何“覆盖”已注入的EntityManager呢?
还有其他好的想法/方法吗?
是的,这个有点担心为不同环境配置配置文件。
虽然它不能满足您对密码和替换对象的“运行时”设置,但它将作为Spring Bean配置文件进行维护。
就像这样;
@Configuration
@Profile("dev")
public class StandaloneDataConfig {
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.HSQL)
.addScript("classpath:com/bank/config/sql/schema.sql")
.addScript("classpath:com/bank/config/sql/test-data.sql")
.build();
}
}
假设您想要加载生产环境的配置文件?
您需要使用@Profile("production")
定义另一个配置文件,并从类路径位置加载属性文件。
使用Spring Boot,您可以激活您的配置文件:
SPRING_PROFILES_ACTIVE=production mvn spring-boot:run
这样可以让您在需要时更改密码并重启服务器。无论如何,当您更改密码时,连接都需要重新启动。因此,理想情况下,这应该使工作变得更加容易。