【spring boot】SpringBoot初学(2) - properties配置和读取

前言

  只是简单的properties配置学习,修改部分“约定”改为自定义“配置”。真正使用和遇到问题是在细看。

一、主要

  核心只是demo中的: @PropertySource(value = "classpath:/config/custom.properties", ignoreResourceNotFound = true)

 

二、demo

image

// application 注解
@Configuration
@ComponentScan
@EnableAutoConfiguration
@PropertySource(value = "classpath:/config/custom.properties", ignoreResourceNotFound = true)
// Controller 注解
@Controller
public class PropertiesController {
    @Value("${CONSTANT_PASSWORD}")
    private String password;

    @Autowired
    private ConfigBean configBean;

    @RequestMapping("/custom")
    public String custom(@RequestParam(value="name", required=false, defaultValue="${CONSTANT_USER}") String name
            , Model model) {
        model.addAttribute("name", name);
        model.addAttribute("password", password);
        System.out.println(configBean);
        return "custom";
    }

    public static void main(String[] args) {
        SpringApplication.run(PropertiesController.class, args);
    }
}

config/custom.properties

## 常量配置
CONSTANT_USER=vergiyln
CONSTANT_PASSWORD=中文123

## thymeleaf 配置
spring.thymeleaf.prefix=classpath:/templates/properties/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
    # set to false for hot refresh
spring.thymeleaf.cache=false

config/ConfigBean.properties  注入bean配置(日期暂时不知道怎么注入)

vergilyn.map[blog]=http://www.cnblogs.com/VergiLyn/
vergilyn.map[name]=VergiLyn
vergilyn.map[remark]=备注,中文23333

vergilyn.list[0]=Carpenters
vergilyn.list[1]=Celine Dion
vergilyn.list[2]=Bon Jovi
vergilyn.list[3]=Taylor Swift

vergilyn.str=string
vergilyn.num=124
vergilyn.date=2017-01-14 23:55:19
vergilyn.isSuccess=false

properties对应的JavaBean

@Configuration
// prefix = value,看源码
@ConfigurationProperties(prefix = "vergilyn")
@PropertySource("classpath:config/ConfigBean.properties")
@Component
public class ConfigBean implements Serializable{
    private String str;

    private Integer num;

//  注意:要是setIsSuccess(),不能是setSuccess()
    private boolean isSuccess;
//  日期不知道怎么注入
//  private Date date;

    private Map<String, String> map;

    private List<String> list;

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    public Map<String, String> getMap() {
        return map;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    }

    public List<String> getList() {
        return list;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public Boolean isSuccess() {
        return isSuccess;
    }

    public void setIsSuccess(Boolean success) {
        isSuccess = success;
    }
}

custom.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>测试properties</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'user: ' + ${name}" />
<p th:text="'password: ' + ${password}" />
</body>
</html>

测试结果:

image

image

二、扩展

  1、idea中注入properties中文乱码。

    起初,我以为需要*.properties或者*.xml或者别的什么配置中要配置编码,但发现并不是。

    参考:Springboot 之 解决IDEA读取properties配置文件的中文乱码问题

image

  2、注入属性类型。

    如demo,基本上string、int是可以的,不用多余的配置。但测试date并不知道怎么注入。

    特别需要注意的是isSuccess;生成的set是setSuccess(),但properties中确实isSuccess导致注入失败。

  3、@ConfigurationProperties中可以设置前缀

Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ConfigurationProperties {
    @AliasFor("prefix")
    String value() default "";

    @AliasFor("value")
    String prefix() default "";

    boolean ignoreInvalidFields() default false;

    boolean ignoreNestedProperties() default false;

    boolean ignoreUnknownFields() default true;

    boolean exceptionIfInvalid() default true;

    /** @deprecated */
    @Deprecated
    String[] locations() default {};

    /** @deprecated */
    @Deprecated
    boolean merge() default true;
}

    如源码,可以看出prefix与value是一样的。

  4、thymeleaf 表达式、方言

    ${...}:变量表达式;

    *{...}:选择变量表达式;

    #{...}:消息表达式;

    @{...}:链接url表达式

    有待了解,现在还不清楚具体是什么、如何使用、什么时候用。

    参考:

        thymeleaf 基本语法

        5分钟了解Thymeleaf的标准方言(Standard dialects)

 

附录

    玩转spring boot——properties配置

posted @ 2017-01-15 01:15  淡丶无欲  阅读(14490)  评论(0编辑  收藏  举报