Java配置方式读取外部的资源配置文件

Java配置方式读取外部的资源配置文件

大家好,又见面了,我是全栈君。

通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法:

package cn.qlq;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration // 通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "cn.qlq") // 配置扫描包
@PropertySource(value = { "classpath:jdbc.properties", "xxxxx", "yyyyy" }, ignoreResourceNotFound = true)
public class SpringConfig {

    @Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
    public UserDao getUserDAO() {
        return new UserDao(); // 直接new对象做演示
    }

}

 

问题:

1.读取多个配置文件:

 

2.如果文件不存在忽略错误:

 

 

打开@PropertySource注解源码可以看到:

 

 

 

——————–   配置数据库连接池例子————-

0.目录:

 

db.properties

;;;;;;;;;;;;;;;;;;;;
;DataBaseConnection;
;;;;;;;;;;;;;;;;;;;;
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/maven
jdbc.username=sa
jdbc.password=123456

 

 

 

1. 导入依赖:

<!-- 连接池 -->
        <dependency>
            <groupId>com.jolbox</groupId>
            <artifactId>bonecp-spring</artifactId>
            <version>0.8.0.RELEASE</version>
        </dependency>

 

之前的Spring xml配置连接池:

 <!-- 定义数据源 -->
    <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"
        destroy-method="close">
        <!-- 数据库驱动 -->
        <property name="driverClass" value="${jdbc.driverClassName}" />
        <!-- 相应驱动的jdbcUrl -->
        <property name="jdbcUrl" value="${jdbc.url}" />
        <!-- 数据库的用户名 -->
        <property name="username" value="${jdbc.username}" />
        <!-- 数据库的密码 -->
        <property name="password" value="${jdbc.password}" />
        <!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 -->
        <property name="idleConnectionTestPeriod" value="60" />
        <!-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 -->
        <property name="idleMaxAge" value="30" />
        <!-- 每个分区最大的连接数 -->
        <!-- 
            判断依据:请求并发数
         -->
        <property name="maxConnectionsPerPartition" value="100" />
        <!-- 每个分区最小的连接数 -->
        <property name="minConnectionsPerPartition" value="5" />
    </bean>

 

2. 参考xml配置改造成java配置方式:

SpringConfig .java
package cn.qlq;


import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import com.jolbox.bonecp.BoneCPDataSource;

@Configuration // 通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "cn.qlq") // 配置扫描包
@PropertySource(value = { "classpath:db.properties", "xxxxx", "yyyyy" }, ignoreResourceNotFound = true)
public class SpringConfig {

    @Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
    public UserDao getUserDAO() {
        return new UserDao(); // 直接new对象做演示
    }
    @Value("${jdbc.url}")
    private String jdbcUrl;

    @Value("${jdbc.driverClassName}")
    private String jdbcDriverClassName;

    @Value("${jdbc.username}")
    private String jdbcUsername;

    @Value("${jdbc.password}")
    private String jdbcPassword;

    @Bean(destroyMethod = "close")
    public DataSource dataSource() {
        BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
        // 数据库驱动
        boneCPDataSource.setDriverClass(jdbcDriverClassName);
        // 相应驱动的jdbcUrl
        boneCPDataSource.setJdbcUrl(jdbcUrl);
        // 数据库的用户名
        boneCPDataSource.setUsername(jdbcUsername);
        // 数据库的密码
        boneCPDataSource.setPassword(jdbcPassword);
        // 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0
        boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60);
        // 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0
        boneCPDataSource.setIdleMaxAgeInMinutes(30);
        // 每个分区最大的连接数
        boneCPDataSource.setMaxConnectionsPerPartition(100);
        // 每个分区最小的连接数    
        boneCPDataSource.setMinConnectionsPerPartition(5);
        return boneCPDataSource;
}


}

 

  

  注意:方法名字为Bean放入spring的Id,因此一般不加get

 解释:

@Bean(destroyMethod = “close”)是定义一个Bean,同时其销毁方法为close(),类似于xml配置中的destroyMethod,打开Bean注解可以看到:

 

思考: 如何使用该DataSource对象?

  放入spring中,使用方法类似于平时的使用方法。

3.测试:

package cn.qlq;

import javax.sql.DataSource;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * 测试类
 * 
 * @author liqiang
 *
 */
public class Test {

    public static void main(String[] args) {
        // 通过Java配置来实例化Spring容器
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);

        DataSource dataSource = context.getBean(DataSource.class);
        System.out.println(dataSource);
        // 销毁该容器
        context.destroy();
    }

}

 结果:

JDBC URL = jdbc:mysql://localhost:3306/maven, Username = sa, partitions = 1, max (per partition) = 100, min (per partition) = 5, idle max age = 30 min, idle test period = 60 min, strategy = DEFAULT

 

  

  注意:实例化容器是  AnnotationConfigApplicationContext

以前是:

BeanFactory

ApplicationContext

  ClassPathXmlApplicationContext

  FileSystemXmlApplicationContext

  XmlWebApplicationContext

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107860.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • google app(appstore安卓版下载)

    MiXCodecsapp是一款mix插件包,MiXCodecsapp整个在线的操作非常的简单,是没有任何的广告和收费问题的,MiXCodecsapp适合的类型比较多。软件介绍MiXCodecsapp是一个平滑的、功能齐全的文件管理应用程序MiXplorer文件管理器的插件工具,MiXCodecsapp让你有具有漂亮的界面,它支持批量移动和复制,以及各种分类,水平模式下无限制的标…

    2022年4月12日
    47
  • JS 中 scrollWidth、scrollHeight、scrollLeft 、scrollTop 详解

    JS 中 scrollWidth、scrollHeight、scrollLeft 、scrollTop 详解1.总述在JS中scrollWidth、scrollHeight、scrollLeft 、scrollTop属性在做一些复杂的交互效果中是非常常用的,因此在本博文中详细的介绍并给出实例。以上的4个属性是成对出现的,因此下面介绍中也成对的介绍,在实例中为了减少代码量,我直接用的id,实际开发中不推荐。2.scrollWidth和scrollHeight2.1概念element…

    2022年7月23日
    8
  • Java解析JSON文件「建议收藏」

    Java解析JSON文件「建议收藏」这篇文章主要讲讲通过java去解析不同地方的json文件通常我们需要解析本地的json文件或者服务器上的json文件。我们用来解析json格式的jar包有很多,jackson,fastjson,gson都行。但本人喜欢用fastjson。所以本篇都是以fastjson来解析json文件。1.解析本地json文件随便把一个json文件存储在本地的一个文件夹下,然后通过文件流将json文件内容读取出来。然后转换成String,最后转json对象,然后再解析,获取自己想要的数据。首先我们这个json文

    2022年10月12日
    2
  • 微信公众平台接口调试工具

    微信公众平台接口调试工具微信公众平台为公众号开发者提供了网页版的接口调试工具,开发者可以直接在网页中调用对应的接口,比如获取access_token接口,创建菜单接口,发送消息接口等等。 先看一下界面,访问:http://mp.weixin.qq.com/debug/可以看到如下界面: 一、接口类型:因为微信公众号接口比较多,所以这里进行了分类,包括:基础支持、向用户发送消息、用户管理、自定义…

    2022年6月23日
    24
  • 记一次压测问题定位:connection reset by peer,TCP三次握手后服务端发送RST

    记一次压测问题定位:connection reset by peer,TCP三次握手后服务端发送RST问题描述这两天用Go做一个比较简单的task:后端有HTTPServer和TCPServer。客户端通过http接入到HTTPServer,HTTPServer通过RPC将请求发送到TCPServer,所有的业务逻辑都由TCPServer处理。压测:自己的mac电脑(CPU:Inteli7,4核,2.7GHz。内存:16G),硬件够用。客户端用Go编写,1个goruntine启…

    2022年10月1日
    3
  • NET命令的基本用法[通俗易懂]

    NET命令的基本用法[通俗易懂] 本文文章综合了WINDOWS98,WINDOWSWORKSTATION和WINDOWSSERVER这三个操作系统关于NET命令的解释,相信对大家会有所帮助。(1)NET命令是一个命令行命令。(2)管理网络环境、服务、用户、登陆……等本地信息(3)WIN98,WINWORKSTATION和WINNT都内置了NET命令。(4)但WIN98的NET命令和WORKS

    2022年5月28日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号