Spring Boot 无法从配置文件特定的 yaml 文件中读取
Posted
技术标签:
【中文标题】Spring Boot 无法从配置文件特定的 yaml 文件中读取【英文标题】:Spring boot unable to read from profile specific yaml file 【发布时间】:2018-03-05 06:15:34 【问题描述】:我在玩 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 个配置文件,例如本地、开发和产品。
【问题讨论】:
如果你使用的是spring boot,那你为什么不使用数据源自动配置呢? 【参考方案1】:在你的 gradle 文件中添加以下内容
bootRun
profile: local
或者试试
./gradlew bootRun -Dspring.profiles.active=local
【讨论】:
【参考方案2】:我有同样的问题。我通过添加解决了它
Spring:
profiles: local
请确保其缩进正确。
【讨论】:
以上是关于Spring Boot 无法从配置文件特定的 yaml 文件中读取的主要内容,如果未能解决你的问题,请参考以下文章
无法从 Spring Boot 应用程序中的自定义 yml 文件加载配置