`

通过Spring上下文获得配置的数据源

 
阅读更多

在项目中,需要执行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();

      }

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    spring boot多数据源配置

    创建一个继承自`AbstractRoutingDataSource`的类,通过设置当前数据源上下文来实现数据源的切换: ```java @Component public class DynamicDataSource extends AbstractRoutingDataSource { @Override ...

    spring 动态多数据源配置代码

    Spring可以通过XML配置或Java配置来实现多数据源。Java配置更符合现代开发习惯,也更易于理解和维护。 3. **核心组件**: - `AbstractRoutingDataSource`:这是Spring提供的核心类,用于动态路由数据源。它会根据...

    spring配置JNDI数据源

    3. **使用数据源**:现在,我们可以在Spring的应用上下文中通过`@Autowired`注解或者通过`ApplicationContext`获取到数据源,并使用它来创建JdbcTemplate或JPA的EntityManagerFactory等。 ```java @Autowired ...

    SpringBoot配置多数据源实现动态切换数据源

    总结来说,SpringBoot实现多数据源和动态切换的关键在于正确配置多个数据源,创建自定义的AOP切面和ThreadLocal上下文。在实际项目中,还需要考虑事务管理、异常处理等复杂情况,确保数据的一致性和安全性。通过理解...

    spring获取weblogic jndi数据源的两种方式

    在Spring配置文件中,可以通过`org.springframework.jndi.JndiObjectFactoryBean`类来定义一个数据源。例如: ```xml &lt;bean id="sysDB" class="org.springframework.jndi.JndiObjectFactoryBean"&gt; &lt;value&gt;hzsh_...

    基于注解和Spring的多数据源配置和使用

    在Spring Boot中,可以通过配置文件(如application.properties或application.yml)指定当前环境,然后在数据源配置类上使用`@Profile`注解,使其在特定环境中生效。 3. **使用`@Configuration`和`@Bean`注解**:在...

    mybatis+spring实现动态切换数据源

    4. **编写切换逻辑**:在业务代码中,我们需要在需要切换数据源的地方,设置当前线程的上下文变量,例如使用`ThreadLocal`。这样,`DynamicDataSource`就能根据这个变量来选择正确的数据源。 ```java public class ...

    spring-boot2.0多数据源

    4. **配置多数据源**: 在Spring Boot中,可以通过配置不同的`@Configuration`类来设置多个数据源。每个数据源可以有自己的`DataSourceProperties`,并通过`@Bean`注解创建对应的`DataSource`实例。 5. **切换数据源...

    spring整合mybatis多数据源

    6. **编写业务代码**:最后,在业务层,我们可以通过设置一个属性或者上下文变量来切换数据源,然后调用MyBatis的接口进行数据操作。Spring会自动处理数据源的选择和事务的传播。 在提供的"spring整合mybatis多数据...

    spring多数据源

    2. **AbstractRoutingDataSource**:这是一个抽象的数据源类,它可以根据当前的上下文信息(如线程绑定的bean、请求参数等)动态决定使用哪个具体的数据源。通过扩展这个类或直接配置路由规则,我们可以实现数据源的...

    spring 动态切换数据源

    综上所述,Spring动态切换数据源是通过配置不同数据源,结合`AbstractRoutingDataSource`子类和`ThreadLocal`管理的策略,实现在运行时选择合适的数据源执行SQL操作。这一机制极大地增强了系统的灵活性和可扩展性。

    Spring动态切换多数据源Demo

    这个类可以根据某些条件(如事务的标识、请求上下文等)动态决定使用哪个数据源。在`dynamicDatasourceDemo`项目中,可能有一个自定义的DataSource类,继承自`AbstractRoutingDataSource`,并重写`...

    mybatis spring 多数据源

    标题 "mybatis spring 多数据源" 涉及到的...总的来说,"mybatis spring 多数据源"的主题涵盖了如何在Java应用中利用MyBatis和Spring进行多数据库管理,包括数据源配置、动态数据源路由、事务管理以及相关工具的使用。

    动态数据源实现spring

    Spring会自动根据当前的上下文信息选择正确的数据源。 通过这样的方式,Spring的动态数据源实现为开发者提供了极大的便利,使得在多数据库环境中编写代码变得更加简单和灵活。在实际项目中,我们还可以结合Spring的...

    Spring+Hibernate多数据源

    Spring提供了AbstractRoutingDataSource类,允许我们根据某种规则(如事务、请求上下文等)动态切换数据源。我们需要扩展这个类,并实现determineCurrentLookupKey方法来决定当前应该使用哪个数据源。 接着,描述中...

    springmvc spring 两套上下文问题

    此外,使用Spring Boot可以简化配置,通过自动配置和Java配置减少上下文问题。 总的来说,理解和管理Spring MVC和Spring的两套上下文是开发高质量Spring应用的重要环节。这涉及到Bean的生命周期管理、依赖注入以及...

    Tomcat6+spring+jndi配置数据源说明.docx

    Tomcat6+Spring+JNDI配置数据源说明 本文档主要介绍了Tomcat6+Spring+JNDI配置数据源的详细步骤和原理。数据源是一个池子,里面有若干个数据连接对象,当需要时就从里面拿一个使用,使用完毕就放回去,如果超过最大...

    spring动态选择数据源

    例如,你可以基于事务属性、请求上下文或其他自定义条件来决定使用哪个数据源。 3. **配置与注册**: 创建自定义的`RoutingDataSource`后,需要在Spring的配置文件中声明并注册这个Bean。确保所有的底层数据源也被...

    spring1.2 操作多个数据源

    你需要创建一个继承自`AbstractRoutingDataSource`的类,并重写`determineCurrentLookupKey()`方法,根据业务逻辑或请求上下文来决定当前应使用哪个数据源。 ```java public class MyRoutingDataSource extends ...

    spring boot配置多数据源

    // 这里可以根据业务逻辑决定使用哪个数据源,比如通过ThreadLocal获取当前请求的上下文信息 return DataSourceContextHolder.getDataSourceKey(); } } ``` 5. **设置数据源切换上下文** 在服务调用前,我们...

Global site tag (gtag.js) - Google Analytics