- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在下面的 Spring 配置类中,我通过 @PropertySource 加载 app.properties 文件,并使用属性文件中的配置构建 2 个不同的 DBCP 数据源。
虽然一切正常,但我不喜欢为每个带有注释的配置属性声明一个变量来构造数据源。我试过像这样 Autowiring 环境类
@Autowired Environment env;
但是,当 env.getProperty() 返回 null 时。有一个更好的方法吗?
@Configuration
@PropertySource("classpath:app.properties")
public class DAOConfig {
@Value( "${txn.dbhost}" ) private String txnDbHost;
@Value( "${txn.dbport}" ) private Integer txnDbPort;
@Value( "${txn.dbservice}" ) private String txnDbService;
@Value( "${txn.dbuser}" ) private String txnDbUser;
@Value( "${txn.dbpwd}" ) private String txnDbPwd;
@Value( "${rpt.dbhost}" ) private String rptDbHost;
@Value( "${rpt.dbport}" ) private Integer rptDbPort;
@Value( "${rpt.dbservice}" ) private String rptDbService;
@Value( "${rpt.dbuser}" ) private String rptDbUser;
@Value( "${rpt.dbpwd}" ) private String rptDbPwd;
@Bean(destroyMethod = "close")
public DataSource txnDataSource() {
return new DataSources.Builder()
.host(txnDbHost)
.port(txnDbPort)
.service(txnDbService)
.user(txnDbUser)
.pwd(txnDbPwd)
.build();
}
@Bean(destroyMethod = "close")
public DataSource rptDataSource() {
return new DataSources.Builder()
.host(rptDbHost)
.port(rptDbPort)
.service(rptDbService)
.user(rptDbUser)
.pwd(rptDbPwd)
.build();
}
}
编辑:我收回关于 Environment.getProperty() 不起作用的说法。它确实有效。我错误地提供了属性名称。对于那些不想使用 Spring Boot 的人,您可以按如下方式 Autowiring 环境:
@Configuration
@PropertySource("classpath:app.properties")
public class DAOConfig {
@Autowired Environment env;
@Bean(destroyMethod = "close")
public DataSource txnDataSource() {
return new DataSources.Builder()
.host(env.getProperty("txn.dbhost"))
.port(env.getProperty("txn.dbport"))
.service(env.getProperty("txn.dbservice"))
.user(env.getProperty("txn.dbuser"))
.pwd(env.getProperty("txn.dbpwd"))
.build();
}
}
最佳答案
如果您正在使用(或愿意使用)Spring Boot,那么您可以使用 @ConfigurationProperties
注释。
这是来自 Spring Boot 源代码的示例:
@ConfigurationProperties(prefix = "spring.activemq")
public class ActiveMQProperties {
private String brokerUrl = "tcp://localhost:61616";
private boolean inMemory = true;
private boolean pooled = false;
private String user;
private String password;
// Will override brokerURL if inMemory is set to true
public String getBrokerUrl() {
if (this.inMemory) {
return "vm://localhost";
}
return this.brokerUrl;
}
public void setBrokerUrl(String brokerUrl) {
this.brokerUrl = brokerUrl;
}
public boolean isInMemory() {
return this.inMemory;
}
public void setInMemory(boolean inMemory) {
this.inMemory = inMemory;
}
public boolean isPooled() {
return this.pooled;
}
public void setPooled(boolean pooled) {
this.pooled = pooled;
}
public String getUser() {
return this.user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
}
实际上,这是将属性 spring.activemq.*
映射到它们各自的属性。
使用前一种代码可以避免在每个字段上使用 @Value
。
对于您展示的特定 DataSource 示例,从版本 1.1.0.M1
开始的 Spring Boot 提供了构建在 @ConfigurationProperties
上的 DataSourceBuilder
> 并极大地简化了您要实现的配置类型。请参阅文档 here
在您的情况下,代码将是:
@Bean
@ConfigurationProperties(prefix="txn")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix="rpt")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
关于java - 使用@PropertySource 配置 Spring 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23981670/
在Spring框架中@PropertySource注解是非常常用的一个注解,其主要作用是将外部化配置解析成key-value键值对"存入"Spring容器的Environment
我想使用 @PropertySource 注释设置动态属性源值。谁能告诉我如何实现这一目标?对于下面我动态传递属性文件名。 @Configuration @PropertySource("classp
为什么当我尝试从属性文件输出数据时,显示的数据是错误的? 在我的 ChatApp 项目中,我有 datasource-cfg.properties 文件: # DataSource ds.databa
我有一个@Configuration类。这个类有一个@PropertySource。 我希望每个应用程序都有一个不同的属性。 示例: @Configuration @PropertySource("f
我有一个完美的测试设置,如下所示...... @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(loader = Annota
自 4.0 以来, Spring 为所有标记为 @Configuration 的类引入了一个新的注解 @PropertySources。它采用不同的 @PropertySource 作为参数。 @Pr
我正在使用 Spring Java 配置来创建我的 bean。但是这个 bean 对 2 个应用程序是通用的。两者都有一个属性文件 abc.properties 但具有不同的类路径位置。当我把明确的类
在我的 sprint 启动应用程序中,我有一个配置类来读取属性文件:common.properties 和 dev.properties。我在两个属性文件中都有相同的 key server.url。该
我正在 Tomcat 中将 Spring Boot 应用程序部署为 WAR 文件。我希望我的 application-local.properties 能够覆盖 application.propert
我的配置文件有问题,它位于我的 jar 文件之外的其他目录中。 我使用 @PropertySource 加载属性。 @PropertySource(ignoreResourceNotFound = t
我只需要读取MyServiceImpl.java类中的menu.properties文件这些值不是特定于环境的。 menu.properties ---------------- menu.optio
我有一个 micronaut 项目,我想为私有(private)数据(如数据库连接等)提供一个非版本化的配置文件 此信息必须通过@Property注释加载,但由于将有多个.yml(至少还有一个appl
我有一个关于以编程方式向 Spring 上下文添加属性的问题。 GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(
我正在尝试通过以下方式创建一个 spring 配置类 @Configuration @PropertySource(value={"file:${my.dir}/fileone.properties"
嗨,我是 Spring 和 Jpa 集成的初学者。当我尝试配置我的数据库连接时,详细信息处理程序 itp。我发现了 Spring 的奇怪行为。 首先,我有3个配置文件: 1) RootConfig -
如何在 spring 中刷新 @PropertySouce(propertyFile)。 例如:-属性文件中有一个参数:- MY_APP_NAME=MY APPLICATION 我正在使用
我想用 java ... -Denv=prod ... 启动我的程序并且有 @PropertySource("classpath:/settings/$idontknowwhat$/database.
配置 @Configuration @PropertySources({ @PropertySource("classpath*:properties/test-database.proper
我遇到了连线问题,但没有找到任何提示。 我正在使用属性文件处理数据库分片配置。我得到了一个负责加载这些属性的类: @Component @PropertySources(value = *arrayO
无论如何我可以在我的程序中知道通过Spring的@PropertySource注释加载的文件的完整路径。我需要它显示在日志中,以便可以知道应用程序中正在使用哪个属性文件 最佳答案 此信息已由 Stan
我是一名优秀的程序员,十分优秀!