【问题标题】:Spring boot unable to read from profile specific yaml fileSpring Boot 无法从配置文件特定的 yaml 文件中读取
【发布时间】: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,那你为什么不使用数据源自动配置呢?

标签: java spring-boot


【解决方案1】:

在你的 gradle 文件中添加以下内容

bootRun {
  profile: local
}

或者试试

./gradlew bootRun -Dspring.profiles.active=local

【讨论】:

    【解决方案2】:

    我有同样的问题。我通过添加解决了它

    Spring:
      profiles: local
    

    请确保其缩进正确。

    【讨论】:

      猜你喜欢
      • 2023-01-10
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      • 2021-03-05
      • 2020-01-23
      • 2018-10-27
      • 2017-10-07
      • 2019-02-21
      相关资源
      最近更新 更多