• 【spring boot】SpringBoot初学(2)


    前言

      只是简单的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配置

  • 相关阅读:
    动车上的书摘-java对象流与序列化
    动车上的书摘-java网络 连接服务器
    HP-Socket v3.2.2
    古典音乐 (java基础 继承)
    编写高质量代码改善java程序的151个建议——[52-57]String !about String How to use them?
    项目ITP(七) javaWeb 整合 Quartz 实现动态调度 并且 持久化
    HP-JavaUtil: xls 操作类
    [ Talk is Cheap Show me the CODE ] : jQuery Mobile工具栏
    [ Talk is Cheap Show me the CODE ] : jQuery Mobile页面布局
    20140622
  • 原文地址:https://www.cnblogs.com/VergiLyn/p/6286507.html
Copyright © 2020-2023  润新知