0


spring导入第三方资源

一、第三方资源配置管理

说明:以管理DataSource连接池对象为例讲解第三方资源配置管理

1 管理DataSource连接池对象

问题导入

配置数据库连接参数时,注入驱动类名是用driverClassName还是driver?

1.1 管理Druid连接池【重点】

数据库准备

createdatabaseifnotexists spring_db characterset utf8;use spring_db;createtableifnotexists tbl_account(
    id intprimarykeyauto_increment,
    name varchar(20),
    money double);insertinto tbl_account values(null,'Tom',1000);insertinto tbl_account values(null,'Jerry',1000);

【第一步】添加Druid连接池依赖

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency>

注意:除了添加以上两个依赖之外,别忘了添加spring-context依赖。

【第二步】配置DruidDataSource连接池Bean对象

<beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"><propertyname="driverClassName"value="com.mysql.jdbc.Driver"/><propertyname="url"value="jdbc:mysql://localhost:3306/spring_db"/><propertyname="username"value="root"/><propertyname="password"value="root"/></bean>

【第三步】在测试类中从IOC容器中获取连接池对象并打印

publicclassApp{publicstaticvoidmain(String[] args){ApplicationContext ctx =newClassPathXmlApplicationContext("applicationContext.xml");DataSource dataSource =(DataSource) ctx.getBean("dataSource");System.out.println(dataSource);}}

1.2 管理c3p0连接池

【第一步】添加c3p0连接池依赖

<dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version></dependency>

【第二步】配置c3p0连接池Bean对象

<beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"><propertyname="driverClass"value="com.mysql.jdbc.Driver"/><propertyname="jdbcUrl"value="jdbc:mysql://localhost:3306/spring_db"/><propertyname="user"value="root"/><propertyname="password"value="root"/><propertyname="maxPoolSize"value="1000"/></bean>

注意:同一个Spring容器中不能有两个id="dataSource"的连接池。

【第三步】在测试类中从IOC容器中获取连接池对象并打印

publicclassApp{publicstaticvoidmain(String[] args){ApplicationContext ctx =newClassPathXmlApplicationContext("applicationContext.xml");DataSource dataSource =(DataSource) ctx.getBean("dataSource");System.out.println(dataSource);}}

2 加载properties属性文件【重点】

目的:将数据库的连接参数抽取到一个单独的文件中,与Spring配置文件解耦。

问题导入

问题1:如何解决使用EL表达式读取属性文件中的值结果读取到了系统属性问题?

问题2:加载properties文件写法标准写法该怎么写?

2.1 基本用法

【第一步】编写jdbc.properties属性文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/spring_db
jdbc.username=root
jdbc.password=root

【第二步】在applicationContext.xml中开启开启context命名空间,加载jdbc.properties属性文件

在这里插入图片描述

小技巧:如果你觉得上述复制粘贴方式不好改或者容易改错,其实idea是有提示功能的,注意不要选错就行了。有些版本的idea没有这个提示,那么就按照上面复制粘贴的方式改,改完之后可以做成live template模板,后期直接用。
在这里插入图片描述

<context:property-placeholderlocation="jdbc.properties"/>

【第三步】在配置连接池Bean的地方使用EL表达式获取jdbc.properties属性文件中的值

<beanclass="com.alibaba.druid.pool.DruidDataSource"><propertyname="driverClassName"value="${jdbc.driver}"/><propertyname="url"value="${jdbc.url}"/><propertyname="username"value="${jdbc.username}"/><propertyname="password"value="${jdbc.password}"/></bean>

配置完成之后,运行之前的获取Druid连接池代码,可以获取到连接池对象就表示配置成功。

2.2 配置不加载系统属性

问题

如果属性文件中配置的不是jdbc.username,而是username=root666,那么使用${username}获取到的不是root666,而是计算机的名称。

原因

系统属性的优先级比我们属性文件中的高,替换了我们的username=root666。

解决

解决1:换一个名称,例如不叫username,叫jdbc.username。

解决2:使用system-properties-mode="NEVER"属性表示不使用系统属性。

<context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>

2.3 加载properties文件写法

  • 不加载系统属性
<context:property-placeholderlocation="jdbc.properties"system-properties-mode="NEVER"/>
  • 加载多个properties文件
<context:property-placeholderlocation="jdbc.properties,msg.properties"/>
  • 加载所有properties文件
<context:property-placeholderlocation="*.properties"/>
  • 加载properties文件标准格式
<context:property-placeholderlocation="classpath:*.properties"/>
  • 加载properties文件标准格式
<context:property-placeholderlocation="classpath*:*.properties"/>
标签: spring java 数据库

本文转载自: https://blog.csdn.net/qq_64071654/article/details/128194125
版权归原作者 楠慧 所有, 如有侵权,请联系我们删除。

“spring导入第三方资源”的评论:

还没有评论