使用springboot中include的问题

使用的springboot版本如下

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.4.0</version>
	<relativePath /> <!-- lookup parent from repository -->
</parent>

我使用了application.yml,application-dev.yml,application-mysql.yml

application.yml如下

spring:
  profiles:
    active: dev

logging:
  config: classpath:logback-spring.xml

application-ddev.yml如下

server:
  port: 8088
  servlet:
    context-path: /
    multipart:
      maxFileSize: 100MB
      maxRequestSize: 100MB

spring:
  profiles:
    include:
      - mysql

application-mysql.yml如下

spring:
  datasource:
    mysql:
      url: jdbc:mysql://*******:3306/epoch_study?useUnicode=true&characterEncoding=UTF-8&useSSL=false
      driverClassName: com.mysql.jdbc.Driver
      username: ****
      password: ****

但是当我在

@Configuration
@EnableConfigurationProperties
@MapperScan(basePackages = MybatisDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "mybatisSqlSessionFactory")
public class MybatisDataSourceConfig {

    protected static final String PACKAGE = "com.epoch.dao.mybatis";
    protected static final String MAPPER_LOCATION = "classpath:mapper/mybatis/*.xml";

    @Value("${spring.datasource.mysql.url}")
    private String url;

    @Value("${spring.datasource.mysql.username}")
    private String username;

    @Value("${spring.datasource.mysql.password}")
    private String password;

    @Value("${spring.datasource.mysql.driverClassName}")
    private String driverClassName;
}

使用@Value的时候,缺报错如下

Could not resolve placeholder 'spring.datasource.mysql.url' in value "${spring.datasource.mysql.url}"

但是当我吧application-mysql.yml中内容,移动到application-dev.yml中,又可以正常启动,其中
我怀疑是spring.profiles.include使用错误,因此换了多种方式,均不行

在POM中已引用了

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>

请问大家知道是如何造成这种现象的,怎么解决呢?

我猜啊,是没有读取application-mysql.yml这个配置文件的,boot默认会读取application.yml、application-dev.yml。可以自己实现资源读取application-mysql.yml

spring boot 启动加载问题,优先加载application.yml,你上面写的spring.profiles.active=dev代表配置文件使用application-dev.yml。两种方法:1:修改application.yml中的spring.profiles.active=mysql(会导致其他启动参数不可用);2:就是把mysql的内容移到application-dev.yml。

1 Like

真的需要好好的去普及一下spring基础了。这是一个简单的ioc bean问题。