我有一个类从这个application.properties中读取一些属性,并将它们作为配置属性添加到java / spring应用程序中。我现在想要实现的是:我确实将包交付给客户端,并且在此application.properties中有数据库连接详细信息,因此客户端可以更改它们。问题是,这可以在我们创建.war文件后的阶段完成。所以基本上客户端去更改配置文件,在部署时将使用这些配置,或者必须在构建.war文件之前完成。附上你会看到我的解决方案:
// application.properties
#DB properties:
db.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
db.url=jdbc:sqlserver://ip\\instance:port;databaseName=db_name
db.username=db_username
db.password=db_pass
// WebConfig.java
@Configuration
@PropertySource("classpath:application.properties")
public class WebAppConfig {
private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver";
private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";
private static final String PROPERTY_NAME_DATABASE_URL = "db.url";
private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username";
@Resource
private Environment env;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));
dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));
dataSource.setUsername(env.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));
dataSource.setPassword(env.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));
return dataSource;
}
答案 0 :(得分:0)
通常的方法是使用JNDI。它是一个目录(查找)服务,专门用于为打包的Java EE应用程序提供数据库连接,属性和其他运行时配置数据。
答案 1 :(得分:0)
您可以将连接信息放在服务器中(tomcat,jboss或其他)。有特定的文件要做(例如在tomcat中它是context.xml文件)。
之后,您可以使用数据源在应用程序中使用此信息。因此,当war文件部署在服务器上时,连接信息是已知的。
答案 2 :(得分:0)
为什么不将它作为外部引用文件打包,而不是打包application.properties
,例如:
@PropertySource("file:/external/path/to/application.properties")
这将允许客户更改文件而不修改打包的分发。
答案 3 :(得分:0)
在大多数servlet容器中都有一个公共文件夹,您可以在其中存储可用于所有Web应用程序的类路径资源。您可以使用此文件夹进行配置。将您的构建过程更改为不包含application.properties
到最终的war文件中。您可以为此类配置文件准备另一个maven项目。在部署文档中提供application.properties
的副本。在部署期间,您需要根据您的环境调整提供的application.properties
文件中的属性,然后将其放在所有Web应用程序通用的文件夹中。对于Tomcat,它是$CATALINA_HOME/lib
文件夹。在开发期间,您可以通过启动配置将具有此属性文件的文件夹添加到服务器类路径。作为一个缺点,您可以在两个使用相同方法的Web应用程序之间发生命名冲突(两个application.properties
文件)。