小言_互联网的博客

hualinux spring 3.10:使用外部属性文件(新手必看)

351人阅读  评论(0)

目录

一、知识点

二、配置例子

2.1 配置一个数据库连接文件

2.1.1 下载c3p0

2.1.2 下载 mysql-connector-java

2.1.3 下载 mchange-commons-java

2.1.4 复制jar包到项目的lib中

2.1.5 安装mysql数据库

2.2 创建xml配置

2.2 使用外部属性文件


一般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” 


  
  1. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  2. <property name="user" value="root"/>
  3. <property name="password" value="root"/>
  4. <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
  5. <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/hua?serverTimezone=GMT%2B8"/>
  6. </bean>

注:上面的配置mysql一定要安装,并且运行,用户名和密码正确,才可以

phpStudy数据库不指定时区的,所以我指定了一下

src-->com.hualinux.beans.properties.Main.java


  
  1. package com.hualinux.beans.properties;
  2. import org.springframework.context.ApplicationContext;
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;
  4. import javax.sql.DataSource;
  5. import java.sql.SQLException;
  6. public class Main {
  7. public static void main(String[] args) throws SQLException {
  8. ApplicationContext ctx= new ClassPathXmlApplicationContext( "beans-properties.xml");
  9. DataSource dataSource= (DataSource) ctx.getBean( "dataSource");
  10. System.out.println(dataSource.getConnection());
  11. }

运行结果为:

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


  
  1. user: root
  2. password: root
  3. driverClass: com.mysql.cj.jdbc.Driver
  4. jdbcUrl: jdbc:mysql://127.0.0.1:3306/hua?serverTimezone=GMT%2B8

PS:yaml格式冒号后面一定要有空格,有兴趣的可以看一下《YAML 语言教程

beans-properties.xml配置文件修改如下:


  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context= "http://www.springframework.org/schema/context"
  5. 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">
  6. <!-- 导入属性文件-->
  7. <context:property-placeholder location="db.yml" />
  8. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  9. <property name="user" value="${user}"/>
  10. <property name="password" value="${password}"/>
  11. <property name="driverClass" value="${driverClass}"/>
  12. <property name="jdbcUrl" value="${jdbcUrl}"/>
  13. </bean>
  14. <!-- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  15. <property name="user" value="root"/>
  16. <property name="password" value="root"/>
  17. <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
  18. <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/hua?serverTimezone=GMT%2B8"/>
  19. </bean>-->
  20. </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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场