在项目中,需要执行sql语句来完成某项功能。
执行sql语句的方式是打算使用jdbc的方式直接操作数据库,于是就带来了问题,如何获取数据库的链接。
在spring的配置文件中,配置了数据源,如下,是利用配置的数据源获得数据库链接。
1、配置文件配置的数据源如下:此处采用的是BasicDataSource数据源。
<!--本示例采用DBCP连接池。 连接池配置如下 --> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> <property name="driverClassName" value="${jdbc_driverClassName}" /> <property name="url" value="${jdbc_url}" /> <property name="username" value="${jdbc_username}" /> <property name="password" value="${jdbc_password}" /> </bean>
2、在Controller里面,利用 HttpServletRequest 获取Servlet上下文。
public String getResSmid(HttpServletRequest request,@RequestParam(value="querypara", required=true) String querypara, @RequestParam(value="tableName", required=true) String tableName, @RequestParam(value="lon", required=false) String lon, @RequestParam(value="lat", required=false) String lat){ Map result = JdbcUtil.queryDbBySql(request,querypara,tableName, lon, lat); return JSON.toJSONString(result); }
有了request之后,使用如下方式获取上下文,进而获取数据源。
方式一:
ApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext());
DataSource dataSource = (DataSource)wac.getBean("dataSource"); //获得jdbc链接 if ((connection == null) || (connection.isClosed())) { connection = dataSource.getConnection(); }
方式二:
WebApplicationContext wac = (WebApplicationContext) request.getSession().getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); DataSource dataSource = (DataSource)wac.getBean("dataSource"); //获得jdbc链接 if ((connection == null) || (connection.isClosed())) { connection = dataSource.getConnection(); }
3、另外,遇到一种使用场景,数据源使用的是较常用的com.alibaba.druid.pool.DruidDataSource。
则配置之后,获取数据库连接很直接。
1)、读取数据库连接配置文件。
InputStream in = getClass().getResourceAsStream("/dbconfig.properties");
Properties prop = new Properties();
try {
prop.load(in);
}
catch (IOException e) {
e.printStackTrace();
return null;
}
2)、根据1)读取的配置文件,获得配置文件变量properties。
private static DruidDataSource _dds = null;
try
{
_dds = (DruidDataSource)DruidDataSourceFactory.createDataSource(properties);
System.out.println("DruidPool Inited");
} catch (Exception e) {
e.printStackTrace();
}
3)、获得数据库连接。
if ((this.con == null) || (this.con.isClosed())) {
this.con = _dds.getConnection();
}
相关推荐
创建一个继承自`AbstractRoutingDataSource`的类,通过设置当前数据源上下文来实现数据源的切换: ```java @Component public class DynamicDataSource extends AbstractRoutingDataSource { @Override ...
Spring可以通过XML配置或Java配置来实现多数据源。Java配置更符合现代开发习惯,也更易于理解和维护。 3. **核心组件**: - `AbstractRoutingDataSource`:这是Spring提供的核心类,用于动态路由数据源。它会根据...
3. **使用数据源**:现在,我们可以在Spring的应用上下文中通过`@Autowired`注解或者通过`ApplicationContext`获取到数据源,并使用它来创建JdbcTemplate或JPA的EntityManagerFactory等。 ```java @Autowired ...
总结来说,SpringBoot实现多数据源和动态切换的关键在于正确配置多个数据源,创建自定义的AOP切面和ThreadLocal上下文。在实际项目中,还需要考虑事务管理、异常处理等复杂情况,确保数据的一致性和安全性。通过理解...
在Spring配置文件中,可以通过`org.springframework.jndi.JndiObjectFactoryBean`类来定义一个数据源。例如: ```xml <bean id="sysDB" class="org.springframework.jndi.JndiObjectFactoryBean"> <value>hzsh_...
在Spring Boot中,可以通过配置文件(如application.properties或application.yml)指定当前环境,然后在数据源配置类上使用`@Profile`注解,使其在特定环境中生效。 3. **使用`@Configuration`和`@Bean`注解**:在...
4. **编写切换逻辑**:在业务代码中,我们需要在需要切换数据源的地方,设置当前线程的上下文变量,例如使用`ThreadLocal`。这样,`DynamicDataSource`就能根据这个变量来选择正确的数据源。 ```java public class ...
4. **配置多数据源**: 在Spring Boot中,可以通过配置不同的`@Configuration`类来设置多个数据源。每个数据源可以有自己的`DataSourceProperties`,并通过`@Bean`注解创建对应的`DataSource`实例。 5. **切换数据源...
6. **编写业务代码**:最后,在业务层,我们可以通过设置一个属性或者上下文变量来切换数据源,然后调用MyBatis的接口进行数据操作。Spring会自动处理数据源的选择和事务的传播。 在提供的"spring整合mybatis多数据...
2. **AbstractRoutingDataSource**:这是一个抽象的数据源类,它可以根据当前的上下文信息(如线程绑定的bean、请求参数等)动态决定使用哪个具体的数据源。通过扩展这个类或直接配置路由规则,我们可以实现数据源的...
综上所述,Spring动态切换数据源是通过配置不同数据源,结合`AbstractRoutingDataSource`子类和`ThreadLocal`管理的策略,实现在运行时选择合适的数据源执行SQL操作。这一机制极大地增强了系统的灵活性和可扩展性。
这个类可以根据某些条件(如事务的标识、请求上下文等)动态决定使用哪个数据源。在`dynamicDatasourceDemo`项目中,可能有一个自定义的DataSource类,继承自`AbstractRoutingDataSource`,并重写`...
标题 "mybatis spring 多数据源" 涉及到的...总的来说,"mybatis spring 多数据源"的主题涵盖了如何在Java应用中利用MyBatis和Spring进行多数据库管理,包括数据源配置、动态数据源路由、事务管理以及相关工具的使用。
Spring会自动根据当前的上下文信息选择正确的数据源。 通过这样的方式,Spring的动态数据源实现为开发者提供了极大的便利,使得在多数据库环境中编写代码变得更加简单和灵活。在实际项目中,我们还可以结合Spring的...
Spring提供了AbstractRoutingDataSource类,允许我们根据某种规则(如事务、请求上下文等)动态切换数据源。我们需要扩展这个类,并实现determineCurrentLookupKey方法来决定当前应该使用哪个数据源。 接着,描述中...
此外,使用Spring Boot可以简化配置,通过自动配置和Java配置减少上下文问题。 总的来说,理解和管理Spring MVC和Spring的两套上下文是开发高质量Spring应用的重要环节。这涉及到Bean的生命周期管理、依赖注入以及...
Tomcat6+Spring+JNDI配置数据源说明 本文档主要介绍了Tomcat6+Spring+JNDI配置数据源的详细步骤和原理。数据源是一个池子,里面有若干个数据连接对象,当需要时就从里面拿一个使用,使用完毕就放回去,如果超过最大...
例如,你可以基于事务属性、请求上下文或其他自定义条件来决定使用哪个数据源。 3. **配置与注册**: 创建自定义的`RoutingDataSource`后,需要在Spring的配置文件中声明并注册这个Bean。确保所有的底层数据源也被...
你需要创建一个继承自`AbstractRoutingDataSource`的类,并重写`determineCurrentLookupKey()`方法,根据业务逻辑或请求上下文来决定当前应使用哪个数据源。 ```java public class MyRoutingDataSource extends ...
// 这里可以根据业务逻辑决定使用哪个数据源,比如通过ThreadLocal获取当前请求的上下文信息 return DataSourceContextHolder.getDataSourceKey(); } } ``` 5. **设置数据源切换上下文** 在服务调用前,我们...