• Spring读取properties内容


    对于SpringBoot的项目,读取配置文件的内容非常简单,但是对于spring的项目,比如ssm项目,读取配置文件的内容需要手动配置。在使用注入方式之前,默认已经有一个基本ssm框架的空项目。

    可参考项目源码:https://github.com/zhongyushi-git/spring-collection.git。下载代码后,示例代码在spring-properties文件夹下。 

    1.使用xml方式注入

    一般使用xml方式注入数据库的基本信息。

    1)在资源目录下新建db.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/db2020?characterEncoding=utf-8
    jdbc.username=root
    jdbc.password=zys123456

    2)在applicationContext.xml中加载配置文件

    <!-- 配置数据源dataSource -->
    <!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:db.properties"/>
    <!-- 数据库连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
    <property name="maxActive" value="10"/>
    <property name="maxIdle" value="5"/>
    </bean>

    自此,数据库就可以访问了。xml方式注入到此结束。很多时候还需要通过java代码的方式读取配置文件的内容,下面进行详细的介绍。

    2.@Value+@PropertySource注入

    使用@Value注解方式注入配置文件的内容是最常用的方式,也是spring推荐的方式。

    1)新建SystemProperties类,用于指定配置的路径。

    package com.zxh.entity;
    
    
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.stereotype.Component;
    
    @Component
    @PropertySource({"classpath:app.properties"})
    public class SystemProperties {}

    使用@PropertySource注解来指定配置文件的路径。当需要同时读取多个配置文件的内容时,直接在大括号后面使用逗号分隔即可,如下:

    @PropertySource({"classpath:app.properties","classpath:db.properties"})

    2)新建配置文件app.properties

    name=zhongxiaohei
    password=1234
    
    app.name=xiaoxixi
    app.password=000000
    
    china_name=钟小嘿

    3)新建UserController进行接口,使用@value注解和${}获取内容

    package com.zxh.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class UserController {
    
        @Value("${name}")
        private String name1;
    
        @Value("${app.name}")
        private String name2;
    
        @Value("${china_name}")
        private String chinaName;
    
    
    
        @GetMapping("/get1")
        public String get1(){
            return name1;
        }
    
        @GetMapping("/get2")
        public String get2(){
            return name2;
        }
    
        @GetMapping("/get3")
        public String get3(){
            return chinaName;
        }
    
    }

    4)配置tomcat,启动项目,打开浏览器,按照下面的顺序访问:

    访问http://localhost:8080/get1,返回 { data: "zhongxiaohei" },读取文件正常。

    访问http://localhost:8080/get2,返回 { data: "xiaoxixi" },读取文件正常。

    访问http://localhost:8080/get3,返回 { data: "钟小嘿" },读取文件正常。

    5)代码分析。

    在app.properties文件中,分别使用了一级和二级的配置,二级配置之前使用"."分隔,但是它们的读取方式都一样的。

    需要注意的是,使用@Value时,对于参数"username"和"user.name"不能使用,它有默认值,是当前操作系统的名称。如果需要使用,可在前面加上前缀。

    3.@Value+Bean注入

     1)在applicationContext.xml中加载配置文件

    <!-- spring加载配置文件 -->
    <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations">
    <list>
    <value>classpath:app.properties</value>
    </list>
    </property>
    </bean>

    这里只加载了单个文件,如果需要加载多个文件,直接写多个<value>标签,标明文件的位置即可,如

    <list>
    <value>classpath:app.properties</value>
    <value>classpath:db.properties</value>
    <value>classpath:aaa.properties</value>
    </list>

    2)在UserController接口,使用@value注解和#{}获取内容。添加两个访问接口:

        @Value("#{configProperties.name}")
        private String name3;
    
        @Value("#{configProperties['app.name']}")
        private String name4;
    
    
        @GetMapping("/get4")
        public JSONObject get4() {
            JSONObject json = new JSONObject();
            json.put("data", name3);
            return json;
        }
    
        @GetMapping("/get5")
        public JSONObject get5() {
            JSONObject json = new JSONObject();
            json.put("data", name4);
            return json;
        }

    3)重启tomcat,分别访问get4和get5,数据正常返回。分析如下:

    注入的前缀是"configProperties",原因是在获取内容时,需要使用applicationContext.xml中配置的bean的id值作为前缀。这个id值是自定义的,但需要保持两者一致,否则获取不到内容。

    对于一级和二级的配置,读取方式有所不同。实际上都是可以使用中括号的方式注入的,但是为了书写简单,就省略了中括号。

    就是这么简单,你学废了吗?感觉有用的话,给笔者点个赞吧 !
  • 相关阅读:
    根据判断PC浏览器类型和手机屏幕像素自动调用不同CSS的代码
    c#抓取网页内容乱码的解决方案
    C#中使用正则表达式提取超链接地址的集中方法
    sql server日期时间转字符串
    DataGridView直接导出EXCEL
    sql数据库删除表的外键约束(INSERT 语句与 FOREIGN KEY 约束"XXX"冲突。该冲突发生于数据库"XXX",表"XXX", column 'XXX)
    C#抓取页面时候,获取页面跳转后的地址
    HttpWebRequest 抓取页面异常处理办法
    JQuery的Ajax跨域请求的解决方案
    mysql 事物ACID和隔离级别
  • 原文地址:https://www.cnblogs.com/zys2019/p/14657009.html
Copyright © 2020-2023  润新知