zoukankan      html  css  js  c++  java
  • 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值是自定义的,但需要保持两者一致,否则获取不到内容。

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

    就是这么简单,你学废了吗?感觉有用的话,给笔者点个赞吧 !
  • 相关阅读:
    Gof 设计模式
    系统架构师-笔记
    微信小程序弹出层点击穿透问题
    微信小程序-两个input叠加,多次点击字体变粗或闪动
    微信小程序-下拉松开弹不回去顶部留一段空白
    node+vue报错合辑
    Nodejs脚手架搭建基于express的应用
    Vue 核心之数据劫持
    Date——时间戳转化为YYYY-MM-DD h:m:s时间格式
    web页面加载、解析、渲染过程
  • 原文地址:https://www.cnblogs.com/zys2019/p/14657009.html
Copyright © 2011-2022 走看看