Spring_02_配置文件_import和name

本文介绍了Spring框架中使用import进行配置文件管理的方法,包括不同路径配置方式的对比及使用建议,并讲解了如何通过name属性为bean配置多个别名。

前文:Spring_概述与Hello world

 

import

为方便管理配置文件,推荐使用import来规划配置文件。

在applicationContext.xml中,通过配置<import>的resource来导入配置文件。

1、默认情况下,是使用相对路径来寻找配置文件。

(相对于applicationContext.xml)

2、Spring提供了前缀标记用于辅助查找配置文件。

[file:]:使用文件系统的路径方式查找。

[classpath:]:从classpath后查找。推荐使用该方式。

  • 演示

applicationContext.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
    
   <import resource="classpath:com/hanaii/hello/hello.xml"/>
    
</beans>

hello.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="hello" class="com.hanaii.hello.Hello" />
</beans>

 

name

Spring配置文件中,要求<bean>中的id属性值是唯一的。

若bean需要其他的名字,可以配置name属性。

1、name属性可通过逗号、分号、空格来分割多个名字。

2、可通过BeanFactory的getAlias方法获取一个bean的所有名字。

3、一般使用id即可。在SpringMVC,可在name中配置多个名字来代表映射的URL地址。

Spring框架中配置Oracle数据源URL,通常涉及使用`DataSource`对象来定义数据库连接信息。以下是一个基于`HikariCP`连接池的示例配置,展示如何在Spring Boot应用中配置Oracle数据源URL。 ### 使用application.yml配置Oracle数据源 在`application.yml`文件中,可以按照如下方式配置单个Oracle数据源: ```yaml spring: datasource: url: jdbc:oracle:thin:@//localhost:1521/ORCLCDB.localdomain username: your_username password: your_password driver-class-name: oracle.jdbc.OracleDriver hikari: maximum-pool-size: 10 minimum-idle: 5 ``` - `url`: Oracle数据库的JDBC连接字符串。常见的格式为`jdbc:oracle:thin:@//<host>:<port>/<service_name>`。 - `username`: 数据库用户名。 - `password`: 数据库密码。 - `driver-class-name`: Oracle JDBC驱动类名。 - `hikari`: HikariCP连接池的配置项,包括最大连接数最小空闲连接数等[^1]。 ### 使用Java配置类配置Oracle数据源 如果需要更灵活地配置数据源,可以通过自定义`DataSource` Bean来实现。以下是一个Java配置类的示例: ```java import com.zaxxer.hikari.HikariDataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; @Configuration public class DataSourceConfig { @Bean public DataSource dataSource() { HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl("jdbc:oracle:thin:@//localhost:1521/ORCLCDB.localdomain"); dataSource.setUsername("your_username"); dataSource.setPassword("your_password"); dataSource.setDriverClassName("oracle.jdbc.OracleDriver"); dataSource.setMaximumPoolSize(10); dataSource.setMinimumIdle(5); return dataSource; } } ``` - `setJdbcUrl`: 设置Oracle数据库的JDBC连接字符串。 - `setUsername` `setPassword`: 分别设置数据库的用户名密码。 - `setDriverClassName`: 设置Oracle JDBC驱动类名。 - `setMaximumPoolSize` `setMinimumIdle`: 配置HikariCP连接池的最大连接数最小空闲连接数。 ### 使用多数据源配置 如果需要在同一个应用中配置多个数据源,可以使用`@Configuration``@Bean`注解分别定义每个数据源。以下是一个配置两个Oracle数据源的示例: ```java import com.zaxxer.hikari.HikariDataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; @Configuration public class MultiDataSourceConfig { @Bean(name = "primaryDataSource") public DataSource primaryDataSource() { HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl("jdbc:oracle:thin:@//localhost:1521/ORCLCDB.localdomain"); dataSource.setUsername("primary_user"); dataSource.setPassword("primary_password"); dataSource.setDriverClassName("oracle.jdbc.OracleDriver"); dataSource.setMaximumPoolSize(10); dataSource.setMinimumIdle(5); return dataSource; } @Bean(name = "secondaryDataSource") public DataSource secondaryDataSource() { HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl("jdbc:oracle:thin:@//localhost:1521/ORCLCDB.localdomain"); dataSource.setUsername("secondary_user"); dataSource.setPassword("secondary_password"); dataSource.setDriverClassName("oracle.jdbc.OracleDriver"); dataSource.setMaximumPoolSize(10); dataSource.setMinimumIdle(5); return dataSource; } } ``` - `primaryDataSource` `secondaryDataSource`: 分别定义两个不同的数据源,每个数据源都有独立的连接信息。 - 可以通过`@Qualifier`注解在服务层注入不同的数据源[^2]。 ### 动态数据源切换 如果需要在运行时动态切换数据源,可以使用`AbstractRoutingDataSource`来实现。以下是一个简单的实现示例: ```java import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; import java.util.HashMap; import java.util.Map; public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return DataSourceContextHolder.getDataSourceType(); } } ``` - `determineCurrentLookupKey`: 返回当前线程使用的数据源标识符。 - `DataSourceContextHolder`: 一个线程局部变量,用于存储当前线程的数据源类型。 ```java public class DataSourceContextHolder { private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>(); public static void setDataSourceType(String dataSourceType) { CONTEXT_HOLDER.set(dataSourceType); } public static String getDataSourceType() { return CONTEXT_HOLDER.get(); } public static void clearDataSourceType() { CONTEXT_HOLDER.remove(); } } ``` - `setDataSourceType`: 设置当前线程的数据源类型。 - `getDataSourceType`: 获取当前线程的数据源类型。 - `clearDataSourceType`: 清除当前线程的数据源类型。 ```java @Configuration public class DynamicDataSourceConfig { @Bean public DataSource primaryDataSource() { HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl("jdbc:oracle:thin:@//localhost:1521/ORCLCDB.localdomain"); dataSource.setUsername("primary_user"); dataSource.setPassword("primary_password"); dataSource.setDriverClassName("oracle.jdbc.OracleDriver"); return dataSource; } @Bean public DataSource secondaryDataSource() { HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl("jdbc:oracle:thin:@//localhost:1521/ORCLCDB.localdomain"); dataSource.setUsername("secondary_user"); dataSource.setPassword("secondary_password"); dataSource.setDriverClassName("oracle.jdbc.OracleDriver"); return dataSource; } @Bean public DataSource dataSource(DataSource primaryDataSource, DataSource secondaryDataSource) { DynamicDataSource dynamicDataSource = new DynamicDataSource(); Map<Object, Object> targetDataSources = new HashMap<>(); targetDataSources.put("primary", primaryDataSource); targetDataSources.put("secondary", secondaryDataSource); dynamicDataSource.setTargetDataSources(targetDataSources); dynamicDataSource.setDefaultTargetDataSource(primaryDataSource); return dynamicDataSource; } } ``` - `DynamicDataSource`: 自定义的动态数据源类,继承自`AbstractRoutingDataSource`。 - `targetDataSources`: 存储所有可用的数据源。 - `setDefaultTargetDataSource`: 设置默认数据源。 ### 常见问题与解决方案 1. **驱动类未找到**:确保在`pom.xml`或`build.gradle`中正确添加了Oracle JDBC驱动依赖。由于Oracle JDBC驱动不包含在Maven中央仓库中,可能需要手动下载并安装到本地仓库。 ```xml <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>21.10.0.0</version> </dependency> ``` 2. **URL格式错误**:确保使用正确的JDBC URL格式,例如`jdbc:oracle:thin:@//<host>:<port>/<service_name>`。如果使用SID而不是服务名,URL应为`jdbc:oracle:thin:@<host>:<port>:<SID>`。 3. **连接失败**:检查网络配置、数据库监听器状态以及防火墙设置,确保应用服务器能够访问数据库服务器[^2]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值