繁体   English   中英

Spring Boot无法从配置文件特定的yaml文件读取

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM