[英]Spring boot unable to read from profile specific yaml file
我在玩Spring Boot,并尝试创建特定于配置文件的配置文件。 我称它为application-local.yml
。
并添加:
spring:
profiles:
active: local
mysql:
db:
url: jdbc:mysql://localhost:3306/db?serverTimezone=UTC
driverClassName: com.mysql.jdbc.Driver
username: root
password:
hibernate:
dialect: org.hibernate.dialect.MySQL5Dialect
show_sql: false
server:
port: 8080
在我的DatabaseConfig.java文件中,我尝试从application-local.yml
读取并配置数据库:
@Configuration
@EnableTransactionManagement
public class DatabaseConfig {
@Value("${spring.mysql.db.url}")
private String url;
@Value("${spring.mysql.db.username}")
private String userName;
@Value("${spring.mysql.db.password}")
private String password;
@Value("${spring.mysql.db.driverClassName}")
private String driverClassName;
//hibernate
@Value("${hibernate.dialect}")
private String hibernateDialect;
@Value("${hibernate.show_sql}")
private String hibernateShowSql;
@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl(url);
dataSource.setDriverClassName(driverClassName);
dataSource.setUsername(userName);
dataSource.setPassword(password);
return dataSource;
}
@Bean(name="entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean =
new LocalContainerEntityManagerFactoryBean();
localContainerEntityManagerFactoryBean.setDataSource(dataSource());
localContainerEntityManagerFactoryBean.setPackagesToScan("xxxx");
JpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
localContainerEntityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter);
localContainerEntityManagerFactoryBean.setJpaProperties(hibernateProperties());
return localContainerEntityManagerFactoryBean;
}
@Bean
public PlatformTransactionManager platformTransactionManager() {
JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
jpaTransactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
return jpaTransactionManager;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", hibernateDialect);
properties.put("hibernate.show_sql", hibernateShowSql);
return properties;
}
}
现在我得到错误,它无法
创建名称为'databaseConfig'的bean时出错:自动连接依赖项的注入失败; 嵌套异常为java.lang.IllegalArgumentException:无法解析值“ $ {spring.mysql.db.url}”中的占位符“ spring.mysql.db.url”
但是当我将属性文件重命名为application.yml
。 它工作得很好。
我还尝试使用gradle命令从终端运行: ./gradlew -Dspring.profiles.active=local bootRun
但出现相同的错误。 仅当我将YAML文件重构为application.yml
时,它才有效。 我究竟做错了什么? 我打算拥有3个配置文件,例如local,dev和prod。
在gradle文件中添加以下内容
bootRun {
profile: local
}
或尝试
./gradlew bootRun -Dspring.profiles.active=local
我遇到过同样的问题。 我通过添加解决了
Spring:
profiles: local
请确保其缩进正确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.