引入外部属性文件(XML方式)
这里我们就以配置德鲁伊数据库连接池为例进行讲解说明
1. 创建外部属性文件(.properties结尾的文件): jdbc.properties
p.username=root
p.password=mysql
p.url=jdbc:mysql://localhost:3306/mybatisdb?serverTimezone=Asia/Shanghai
p.driverClass=com.mysql.cj.jdbc.Driver
- 注意: 我们编写属性文件的时候最好是使用两级key值, 否则可能会引起一些问题
2. 在Spring.xml文件中添加context名称空间
- 因为我们要使用context名称空间之下的property-placeholder标签来完成引入外部的属性文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WIxjkEZh-1677140259279)(E:\非凡英才\Spring框架\图解\添加context名称空间.png)]
3. 在spring.xml文件中使用context名称空间之下的property-placeholder标签来完成对外部属性文件的引入
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
- location属性就是用来定位到外部属性文件的位置:
- classpath指向的位置如果是在开发时期就是 : java目录和resources目录之下, 如果是在生产环境中(也就是打包之后)就是: WEB-INFO目录之下的classes文件夹
- 在打包成war包部署的时候开发期间的java目录之下的内容和resources目录之下的内容都会被放到WEB-INFO目录之下的classes目录中
- classpath 与 classpath* 的区别:
- classpath只会到你的class路径中查找文件
- classpath不仅包含自己项目中的class路径, 还包括项目中jar文件中的class路径
- classpath后面的值可以是类似正则表达式的(注意 : 是类似正则表达式, 但其实并不正则表达式)
- classpath的值开头加一个*就表示前缀, 前缀任意, 比如 *.properties就表示匹配所有后缀为.properties的文件
4.配置数据源(使用德鲁伊数据库连接池作为实现):
<bean id = "dataSource" class = "com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value = "${p.driverClass}"></property>
<property name="url" value="${p.url}"></property>
<property name="username" value = "${p.username}"></property>
<property name="password" value = "${p.password}"></property>
</bean>
- 在我们使用context名称空间之下的property-placeholder标签完成了对外部属性文件的引入之后我们就可以使用${键}的方式来获取属性文件中对应键的值
- 数据库连接池并不是一个数据库中的概念, 而是一种设计模式, 是"池"的设计模式
- Java数据源其实就是指javax.sql.DataSource接口, 对应着一个数据库中的数据源 , 具体可以有不同的实现类, 这是一个SPI接口, 所以是由不同的数据库厂商提供不同的实现类也就是不同的数据源
5.编写测试方法进行测试
@Test
public void test4() throws SQLException {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
//创建数据源对象
DataSource dataSource = applicationContext.getBean("dataSource",DataSource.class);
try {
System.out.println(dataSource.getConnection());
} catch (SQLException e) {
e.printStackTrace();
}
}
- 这里的测试目的: 如果能正常使用该数据源获取到数据库链接对象, 那么就说明是没有问题的