2017-09-24 63 views
0

我正在玩弹簧启动并试图创建配置文件特定的配置文件。我称之为application-local.yml春季开机无法读取配置文件特定yaml文件

并补充说:

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个配置文件,如本地,开发和产品。

+0

如果使用的是春天开机,那么你为什么不使用数据源自动配置? –

回答

0

要么添加在您的gradle这个文件

bootRun { 
    profile: local 
} 

或以下尝试

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