[Tecnología de Spring] Arquitectura de Spring
[Tecnología de Spring] Caso de entrada de IOC y DI de Spring
[Tecnología de Spring] Configuración y ejemplos de Bean de Spring
[Tecnología de Spring] Inyección de dependencia de Spring (configuración DI)
[Tecnología de Spring] Gestión de configuración de recursos de terceros de Spring
[Tecnología de Spring ] Spring Container Technology
[Spring Technology] Spring Anotation Development
[Spring Technology] Spring Integration Mybatis&Junit Unit Test
[Spring Technology] Spring AOP
[Spring Technology] Spring Transaction Management
Gestión de configuración de recursos de terceros de Spring
Descripción: tome la gestión de los objetos del grupo de conexiones de DataSource como ejemplo para explicar la gestión de configuración de recursos de terceros
1. Administrar objetos de grupo de conexiones de DataSource
importación de problemas
Al configurar los parámetros de conexión de la base de datos, ¿el nombre de la clase del controlador inyectado debe ser driverClassName o driver?
1.1 Administrar el grupo de conexiones de Druid [puntos clave]
preparación de base de datos
create database if not exists spring_db character set utf8;
use spring_db;
create table if not exists tbl_account(
id int primary key auto_increment,
name varchar(20),
money double
);
insert into tbl_account values(null,'Tom',1000);
insert into tbl_account values(null,'Jerry',1000);
[Paso 1] Agregue la dependencia del grupo de conexiones de 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>
Nota: Además de agregar las dos dependencias anteriores, no olvide agregar dependencias de contexto de primavera.
[Paso 2] Configure el objeto Bean del grupo de conexiones DruidDataSource
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/spring_db"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
[Paso 3] Obtenga el objeto del grupo de conexiones del contenedor IOC en la clase de prueba e imprímalo
public class App {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
DataSource dataSource = (DataSource) ctx.getBean("dataSource");
System.out.println(dataSource);
}
}
1.2 Administrar grupo de conexiones c3p0
[Paso 1] Agregue la dependencia del grupo de conexiones c3p0
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
[Paso 2] Configure el objeto Bean del grupo de conexiones c3p0
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_db"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
<property name="maxPoolSize" value="1000"/>
</bean>
Nota: No puede haber dos grupos de conexiones con id="dataSource" en el mismo contenedor Spring.
[Paso 3] Obtenga el objeto del grupo de conexiones del contenedor IOC en la clase de prueba e imprímalo
public class App {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
DataSource dataSource = (DataSource) ctx.getBean("dataSource");
System.out.println(dataSource);
}
}
2. Cargue el archivo de propiedades de propiedades [clave]
Propósito: extraer los parámetros de conexión de la base de datos en un archivo separado y desvincularlo del archivo de configuración de Spring.
importación de problemas
Pregunta 1: ¿Cómo resolver el problema de que la propiedad del sistema se lee como resultado del uso de la expresión EL para leer el valor en el archivo de propiedades?
Pregunta 2: ¿Cómo escribir el método de escritura estándar para cargar el archivo de propiedades?
2.1 Uso básico
[Paso 1] Escriba el archivo de propiedades 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
[Paso 2] Abra el espacio de nombres de contexto en applicationContext.xml y cargue el archivo de propiedades jdbc.properties
Sugerencia: si los estudiantes sienten que el método de copiar y pegar anterior no es fácil de cambiar o de corregir errores, de hecho, la idea tiene una función rápida, solo tenga cuidado de no elegir la incorrecta. Algunas versiones de la idea no tienen este aviso, así que simplemente siga el método de copiar y pegar anterior para modificarlo.Después de la modificación, se puede convertir en una plantilla de plantilla en vivo, que se puede usar directamente más adelante.
<context:property-placeholder location="jdbc.properties"/>
[Paso 3] Use la expresión EL para obtener el valor en el archivo de propiedades jdbc.properties donde está configurado el bean del grupo de conexiones
<bean class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
Una vez completada la configuración, ejecute el código anterior para obtener el grupo de conexiones de Druid y, si se puede obtener el objeto del grupo de conexiones, la configuración es correcta.
2.2 La configuración no carga las propiedades del sistema
pregunta
Si la configuración en el archivo de propiedades no es jdbc.username, sino username=root666, entonces use ${username} para obtener no root666, sino el nombre de la computadora.
razón
La propiedad del sistema tiene prioridad sobre la de nuestro archivo de propiedades, reemplazando nuestro nombre de usuario = root666.
resolver
Solución 1: Cambie el nombre, por ejemplo, en lugar de nombre de usuario, llame a jdbc.username.
Solución 2: utilice el atributo system-properties-mode="NEVER" para indicar que no se utilizan las propiedades del sistema.
<context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>
2.3 Método de escritura del archivo de propiedades de carga
- No cargar propiedades del sistema
<context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>
- Carga múltiples archivos de propiedades
<context:property-placeholder location="jdbc.properties,msg.properties"/>
- Cargar todos los archivos de propiedades
<context:property-placeholder location="*.properties"/>
- Cargar archivo de propiedades**formato estandar**
<context:property-placeholder location="classpath:*.properties"/>
- Cargue el formato estándar del archivo de propiedades
<context:property-placeholder location="classpath*:*.properties"/>