目录
一般java代码编译生成jar文件后,一般不能进行修改,我们写代码的时候往往会有数据库配置,如果放在java代码中就写死了,如果数据库变动的话就不方便修改还得找到java代码,重新编译。
我们一般做法把需要修改的部分变成配置文件方式就在外部,然后用java导入该配置文件读取数据即可。
一、知识点
- 在配置文件里配置 Bean 时, 有时需要在 Bean 的配置里混入系统部署的细节信息(例如: 文件路径, 数据源配置信息等). 而这些部署细节实际上需要和 Bean 配置相分离
- Spring 提供了一个 PropertyPlaceholderConfigurer 的 BeanFactory 后置处理器, 这个处理器允许用户将 Bean 配置的部分内容外移到属性文件中. 可以在 Bean 配置文件里使用形式为 ${var} 的变量, PropertyPlaceholderConfigurer 从属性文件里加载属性, 并使用这些属性来替换变量.
- Spring 还允许在属性文件中使用 ${propName},以实现属性之间的相互引用。
二、配置例子
2.1 配置一个数据库连接文件
配置一个数据库连接,需要的jar包为
2.1.1 下载c3p0
c3p0: https://mvnrepository.com/artifact/com.mchange/c3p0
下面那个是旧版本,2007年就不更新了,点进去可以看到提示已经移到了C3p0了
点上面也会进入c3p0界面,目前最新版本为0.9.5.5
直接把jar包下载下来就行了
2.1.2 下载 mysql-connector-java
mysql-connector-java可以直接打开mysql官网的Connector/j windos下载页面。它提供的是目前mysql的最新版本8.0.20
点“No thanks, just start my download.”即会弹出下载对话框
下载了zip包,我们只需要把里里面的“mysql-connector-java-8.0.20.jar”文件复制出来,先放着,其它不要,后面会用到。
也可以去maven仓库搜索“mysql-connector-java”找到“MySQL Connector/J”并点击,
里面有很多版本,有8.0.x有6.0.x有5.0.x
这里做解释一下:
8.0.x:只适合mysql8.0系列
6.0.x:只适合mysql6系列
5.0.x:只适合mysql5系列。
这里选择8.0.20 就行了
2.1.3 下载 mchange-commons-java
弄c3p0还需要下载多一个包 mchange-commons-java,我这里直接去maven下载,目前最新版本为0.2.20
ps:如果不下载 mchange-commons-java.jar包的话,会报如下错误:
nested exception is java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector
2.1.4 复制jar包到项目的lib中
把上面的 mysql-connector-java-8.0.20.ja 、 c3p0-0.9.5.5.jar、mchange-commons-java-0.2.20.jar 复制到项目下的lib目录中,如下图所示:
从上图中看到红框前面都没有白色小三角,说明是没有解压读取的,需要配置一下idea添加一下jar包就行了
为了方便我也添加一个lib组
重新看项目下lib目录的2个jar包,发现已经被识别出来了
2.1.5 安装mysql数据库
为了方便我直接安装phpStudy,如果不懂怎么安装可以看我的文章《hualinux java 1.6:idea连接mysql8进行数据查询》
再建立一个用户名和密码,我这里还建立一个空的数据库为hua
2.2 创建xml配置
src右击-->new-->XML Configuration File-->Spring config-->输入名字“beans-properties”
-
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
-
<property name="user" value="root"/>
-
<property name="password" value="root"/>
-
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
-
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/hua?serverTimezone=GMT%2B8"/>
-
</bean>
注:上面的配置mysql一定要安装,并且运行,用户名和密码正确,才可以
phpStudy数据库不指定时区的,所以我指定了一下
src-->com.hualinux.beans.properties.Main.java
-
package com.hualinux.beans.properties;
-
-
import org.springframework.context.ApplicationContext;
-
import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-
import javax.sql.DataSource;
-
import java.sql.SQLException;
-
-
public
class Main {
-
public static void main(String[] args) throws SQLException {
-
ApplicationContext ctx=
new ClassPathXmlApplicationContext(
"beans-properties.xml");
-
-
DataSource dataSource= (DataSource) ctx.getBean(
"dataSource");
-
System.out.println(dataSource.getConnection());
-
}
运行结果为:
com.mchange.v2.c3p0.impl.NewProxyConnection@7b4c50bc [wrapping: com.mysql.cj.jdbc.ConnectionImpl@5884a914]
2.2 使用外部属性文件
上面bean中配置了数据库的连接,但这些基本信息最好还是把它拿出来放在基础配置文件中
Spring 提供了一个 PropertyPlaceholderConfigurer 的 BeanFactory 后置处理器, 这个处理器允许用户将 Bean 配置的部分内容外移到属性文件中. 可以在 Bean 配置文件里使用形式为 ${var} 的变量, PropertyPlaceholderConfigurer 从属性文件里加载属性, 并使用这些属性来替换变量.
src-->new-->file-->db.yml
-
user: root
-
password: root
-
driverClass: com.mysql.cj.jdbc.Driver
-
jdbcUrl: jdbc:mysql://127.0.0.1:3306/hua?serverTimezone=GMT%2B8
PS:yaml格式冒号后面一定要有空格,有兴趣的可以看一下《YAML 语言教程》
beans-properties.xml配置文件修改如下:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<beans xmlns="http://www.springframework.org/schema/beans"
-
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
-
xmlns:context=
"http://www.springframework.org/schema/context"
-
xsi:schemaLocation=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
-
-
<!-- 导入属性文件-->
-
<context:property-placeholder location="db.yml" />
-
-
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
-
<property name="user" value="${user}"/>
-
<property name="password" value="${password}"/>
-
<property name="driverClass" value="${driverClass}"/>
-
<property name="jdbcUrl" value="${jdbcUrl}"/>
-
</bean>
-
-
-
<!-- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
-
<property name="user" value="root"/>
-
<property name="password" value="root"/>
-
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
-
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/hua?serverTimezone=GMT%2B8"/>
-
</bean>-->
-
-
-
</beans>
com.hualinux.beans.properties.Main.java代码不如,运行一下,结果为:
com.mchange.v2.c3p0.impl.NewProxyConnection@45efd90f [wrapping: com.mysql.cj.jdbc.ConnectionImpl@4b8729ff]
转载:https://blog.csdn.net/hualinux/article/details/106957223