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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 图书销售管理系统的可行性研究背景搜集和前提分析

    图书销售管理系统的可行性研究背景搜集和前提分析完成小组成员:大佬(20160401084)DEDRAGON(20160401094)1引言1.1编写目的可行性研究的目的是研究图书管理系统的总体需求、实现方案,并分析开发系统的可行性,为决策者提供是否开发该系统的依据和建议。初拟系统实验报告,对软件开发中将要面临的问题及其解决方案进行初步设计及合理安排。明确开发风险及其所带来的经济效益。1.2背景项目名称:图书…

    2022年5月20日
    61
  • 孤儿进程与僵尸进程[总结]「建议收藏」

    孤儿进程与僵尸进程[总结]「建议收藏」1、前言之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入

    2022年7月2日
    24
  • 网易邮箱问候语

    网易邮箱问候语

    2021年11月17日
    78
  • Matlab归一化函数(mapminmax)

    Matlab归一化函数(mapminmax)功能:将矩阵的每一行处理成[-1,1]区间。处理需要归一化的m*n矩阵X,归一化后的矩阵记为Y。主要有5种调用形式1.[Y,PS]=mapminmax(X,YMIN,YMAX)其中,YMIN是我们期望归一化后矩阵Y每行的最小值,YMAX是我们期望归一化后矩阵Y每行的最大值。例1:待处理矩阵X=[456;789]我们期望归一化后每行的最小值为0,最大值为1.程序如下…

    2022年6月29日
    34
  • 股票实盘交易接口API(招商证券交易接口api)

    股票配资系统实盘交易接口怎么做有没有好用的实盘交易接口股票实盘交易接口做股票配资系统难免会用到交易接口,好用的能用的接口也少。券商那边也不提供,那索性自己开发股票配资实盘交易接口了。经过多次尝试,总算搞出来了,实时交易接口可以获取用户数据,实时对接,账户信息,委托买入卖出,支持多家券商。我们做股票配资系统的时候遇到过很多次交易接口问题,然后后面终于是解决了,现在我们的股票配资系统已经很完善…

    2022年4月15日
    579
  • 2020年下半年总结与计划

    2020年下半年总结与计划0x00前言2020年到如今已经到了十二月中旬,下半年所学的东西还是挺多,我觉得学习的一个效率也是有着飞跃般的提升。主要的原因可能在于我和我的好朋友(基友)住在一个房间

    2021年12月12日
    51

发表回复

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

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