【SpringBoot】一:SpringBoot的基础(下)

1.外部化的配置

项目中经常使用 properties 与 yaml 文件,其次是命令行参。

1.1 配置文件基础

1.1.1 配置文件格式

properties

语法:key=value。key 是唯一的,文件扩展名为 properties

yaml

语法:key:[空格] 值

1.1.2 application文件

Spring Boot 同时支持 properties 和 yml 格式的配置文件。 配置文件名称默认是 application。我们可以使用application.properties , application.yml

1.1.3 application.properties

在application.properties中写入我们自己的配置文件

【application.properties】

在这里插入图片描述

【SomeService.java】

package com.sdnu.config.pk1;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.StringJoiner;

@Service
public class SomeService {
    // 使用@Value("${key: 默认值}")
    @Value("${app.name}")
    private String name;
    @Value("${app.owner}")
    private String owner;
    @Value("${app.port:8008}")
    private Integer port;

    public void printValue(){
        StringJoiner joiner = new StringJoiner(";");
        String s = joiner.add(name).add(owner).add(String.valueOf(port)).toString();
        System.out.println("result=" + s);
    }
}

【测试类】

package com.sdnu.config;

import com.sdnu.config.pk1.SomeService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class Lession07ConfigApplicationTests {
    @Autowired
    private SomeService someService;
    @Test
    void test01(){
        someService.printValue();
    }
    @Test
    void contextLoads() {
    }
}

测试结果:
在这里插入图片描述

1.1.4 application.yml

使用yml

# 编写配置文件 key: 值

app:
  name: Lession07
  owner: root
  port: 8002

还是原来的测试程序:
在这里插入图片描述

1.1.5 environment

Environment 是外部化的抽象,是多种数据来源的集合。从中可以读取 application 配置文件,环境变量,系统属性。使用方式在 Bean 中注入 Environment。调用它的 getProperty(key)方法。

package com.sdnu.config.pk2;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;

@Service
public class ReadConfig {
    @Autowired
    public Environment environment;
    public void printValue(){
        //通过key获取某个value
        String name = environment.getProperty("app.name");
        System.out.println(name);
        // 还可以判断某个key是否存在
        if(environment.containsProperty("app.owner")){
            System.out.println("app.owner存在");
            System.out.println(environment.getProperty("app.owner"));
        }
        if(environment.containsProperty("app.port")){
            System.out.println("app.port存在");
            System.out.println(environment.getProperty("app.port", Integer.class, 8999));
        }
    }
}

1.1.6 组织多文件

在这里插入图片描述

【MultiConfigService.java】

package com.sdnu.config.pk3;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class MultiConfigService {
    @Value("${spring.redis.host}")
    private String redisHostName;
    @Value("${spring.datasource.url}")
    private String jdbcUrl;

    public void printValue(){
        System.out.println("host:" + redisHostName);
        System.out.println("url:" + jdbcUrl);
    }
}

测试结果:
在这里插入图片描述

1.1.7多环境配置

在这里插入图片描述

【application-dev.yml】

myapp:
  memo: 这是开发环境配置文件dev

# 指定环境名称
spring:
  config:
    activate:
      on-profile: dev

【application-test.yml】

myapp:
  memo: 这是开发环境配置文件test

# 指定环境名称
spring:
  config:
    activate:
      on-profile: test

在Application.yml中激活test
【Application.yml】

# 编写配置文件 key: 值

app:
  name: Lession07
  owner: root
  port: 8002

# 导入其它配置文件,多个文件之间使用逗号隔开
spring:
  config:
    import: conf/db.yml, conf/redis.yml

  # 激活某个配置文件,(环境)
  profiles:
    active: test

【MultiEnvService.java】

package com.sdnu.config.pk4;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class MultiEnvService {
    @Value("${myapp.memo}")
    private String memo;
    public void printMemo(){
        System.out.println("memo:::" + memo);
    }
}

【测试】

    @Autowired
    private MultiEnvService multiEnvService;
    @Test
    void test04(){
        multiEnvService.printMemo();
    }

在这里插入图片描述

1.2 绑定Bean

1.2.1 简单的属性绑定

【AppBean.java】

package com.sdnu.config.pk5;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @ConfigurationProperties 表示使用Bean对象读取配置项
 * prefix 表示配置文件中的多个key的公共开始部分
 */
@Component
@ConfigurationProperties(prefix = "app")
public class AppBean {
    // key的名称和属性名相同,调用属性setXXXX方法给属性赋值
    private String name;
    private String owner;
    private String port;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getOwner() {
        return owner;
    }

    public void setOwner(String owner) {
        this.owner = owner;
    }

    public String getPort() {
        return port;
    }

    public void setPort(String port) {
        this.port = port;
    }

    @Override
    public String toString() {
        return "AppBean{" +
                "name='" + name + '\'' +
                ", owner='" + owner + '\'' +
                ", port='" + port + '\'' +
                '}';
    }
}

【application.yml】

# 编写配置文件 key: 值

app:
  name: Lession07
  owner: root
  port: 8002

# 导入其它配置文件,多个文件之间使用逗号隔开
spring:
  config:
    import: conf/db.yml, conf/redis.yml

  # 激活某个配置文件,(环境)
  profiles:
    active: test

【测试】

    @Autowired
    private AppBean appBean;
    @Test
    void test05(){
        System.out.println(appBean.toString());
    }

补充:
默认返回代理Bean对象。
在这里插入图片描述
设置@Configuration(proxyBeanMethods = false)后返回普通Bean对象。
在这里插入图片描述

1.2.2 嵌套Bean

【application.yml】
在这里插入图片描述
【NestAppBean.java】
在这里插入图片描述
【Security.java】
在这里插入图片描述

1.2.3 扫描注解

@ConfigurationProperties 注解起作用,还需要@EnableConfigurationProperties 或@ConfigurationPropertiesScan。这
个注解是专门寻找@ConfigurationProperties 注解的,将他的对象注入到 。

【SpringBoot配置类】

package com.sdnu.config;

import com.sdnu.config.pk6.NestAppBean;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

//启动ConfigurationProperties
//@EnableConfigurationProperties({NestAppBean.class})

//扫描注解的包,绑定Bean注入到Spring容器
@ConfigurationPropertiesScan(basePackages = {"com.sdnu.config.pk6"})
@SpringBootApplication
public class Lession07ConfigApplication {
    public static void main(String[] args) {
        SpringApplication.run(Lession07ConfigApplication.class, args);
    }

}

1.2.4 处理第三方库对象

【application.yml添加新的配置】

security:
  username: root77
  password: 888888

【创建配置类】

package com.sdnu.config.pk7;

import com.sdnu.config.pk6.Security;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyApplicationConfig {
    //创建Bean对象,属性来自配置文件
    @ConfigurationProperties(prefix = "security")
    @Bean
    public Security createSecurity(){
        return new Security();
    }
}

【 单元测试】

    @Autowired
    private Security security;

    @Test
    void test07(){
        System.out.println("security = " + security);
    }

1.2.5 集合 Map,List 以及 Array

(1)创建保存数据的Bean
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
(2)配置数据【application.yml】

# 数组和List一样,一个"-" 表示一个成员
names:
  - lisi
  - zhangsan

# List<Myserver> servers
servers:
  - title: 北京服务器
    ip: 192.168.0.0.1
  - title: 上海服务器
    ip: 192.168.0.0.2

# Map<String, User> users
users:
  user1:
    name: 张三
    sex:age: 22
  user2:
    name: 李四
    sex:age: 21

(3) 启动类,增加扫描包
在这里插入图片描述
【测试】


    @Autowired
    private CollectionConfig collectionConfig;

    @Test
    void test08(){
        System.out.println("collectionConfig = " + collectionConfig.toString());
    }

在这里插入图片描述

1.2.6 指定数据源文件

在这里插入图片描述

【group-info.properties】

group.name=IT学习专栏
group.leader=root
group.members=20

【group.java】
在这里插入图片描述
【测试】

    @Autowired
    private Group group;
    @Test
    void test09(){
        System.out.println("group = " + group);
    }

在这里插入图片描述

2.创建对象的三种方式

 传统的 XML 配置文件
 Java Config 技术, @Configuration 与@Bean
 创建对象的注解,@Controller ,@Service , @Repository ,@Compon

Spring Boot 不建议使用 xml 文件的方式, 自动配置已经解决了大部分 xml 中的工作了。如果需要 xml 提供 bean的声明,@ImportResource 加载 xml 注册 Bean

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值