`

通过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_batch.zip

    因此, 再通过线程隔离 ThreadLocal 动态数据源上下文来切换数据源; 切换这个操作使用: aop技术进行织入到配置了注解DS的方法上, 方法是与数据库进行交互时的操作; 具体参考代码文件; 数据库创建和表创建请...

    spring源代码解析

    从加载过程我们可以看到,首先从Servlet事件中得到ServletContext,然后可以读到配置好的在web.xml的中的各个属性值,然后ContextLoder实例化WebApplicationContext并完成其载入和初始化作为根上下文。当这个根上...

    SpringBoot实现动态切换数据源(含源码)

    在数据源切换的场景中,我们通常将数据源信息存储在 `ThreadLocal` 中,然后在数据访问层(如 DAO)中通过 `ThreadLocal` 来获取当前线程的数据源信息,从而动态地切换数据源。 `AbstractRoutingDataSource` 是 ...

    spring boot源码

    spring boot源代码,通过源代码可以了解spring boot底层运行机制。 1. 初始化各种属性,加载成对象  读取环境属性(Environment)  系统配置(spring.factories)  参数(Arguments、application.properties)...

    SpringBoot启动过程-mind版.md

    3. **执行自动配置:** Spring Boot通过自动配置机制根据项目的依赖和配置信息,自动配置应用中需要的各种组件,如数据源、Web服务器等。这减少了开发者的手动配置工作。 4. **扫描组件:** Spring Boot会扫描项目...

    Spring中文帮助文档

    2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. IoC(控制反转)...

    Spring API

    2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. IoC(控制反转)...

    Spring攻略(第二版 中文高清版).part1

    13.4 管理集成测试中的应用上下文 520 13.4.1 问题 520 13.4.2 解决方案 520 13.4.3 工作原理 521 13.5 向集成测试注入测试夹具 526 13.5.1 问题 526 13.5.2 解决方案 526 13.5.3 工作原理 527 13.6...

    Spring in Action(第2版)中文版

    5.2配置数据源 5.2.1使用jndi数据源 5.2.2使用数据源连接池 5.2.3基于jdbc驱动的数据源 5.3在spring里使用jdbc 5.3.1处理失控的jdbc代码 5.3.2使用jdbc模板 5.3.3使用spring对jdbc的dao支持类 5.4在spring里...

    Spring in Action(第二版 中文高清版).part2

    5.2 配置数据源 5.2.1 使用JNDI数据源 5.2.2 使用数据源连接池 5.2.3 基于JDBC驱动的数据源 5.3 在Spring里使用JDBC 5.3.1 处理失控的JDBC代码 5.3.2 使用JDBC模板 5.3.3 使用Spring对JDBC的DAO支持类 5.4...

    Spring in Action(第二版 中文高清版).part1

    5.2 配置数据源 5.2.1 使用JNDI数据源 5.2.2 使用数据源连接池 5.2.3 基于JDBC驱动的数据源 5.3 在Spring里使用JDBC 5.3.1 处理失控的JDBC代码 5.3.2 使用JDBC模板 5.3.3 使用Spring对JDBC的DAO支持类 5.4...

    Spring Boot 集成 MinIO(分布式对象存储系统)

    在手写MinIO 工具类的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。 适合人群:具备一定编程基础,工作1-3年的研发人员...

    spring+quartz 动态任务方案

    虽然可以通过属性文件(在属性文件中可以指定 JDBC 事务的数据源、全局作业和/或触发器侦听器、插件、线程池,以及更多)配置 Quartz,但它根本没有与应用程序服务器的上下文或引用集成在一起。结果就是作业不能访问...

    Spring攻略(第二版 中文高清版).part2

    13.4 管理集成测试中的应用上下文 520 13.4.1 问题 520 13.4.2 解决方案 520 13.4.3 工作原理 521 13.5 向集成测试注入测试夹具 526 13.5.1 问题 526 13.5.2 解决方案 526 13.5.3 工作原理 527 13.6...

    multiple-datasource-spring-apps:在JDBCJPA上下文中展示多个数据源的POC

    它与Spring Boot的现有DataSource配置机制一起使用。 假设您有一个来自的新生成的Spring Boot项目,其中选择了JDBC数据库驱动程序(在本例中为MySQL ,该示例使用MySQL)和Lombok(编译时注释处理器)。 构建此库并...

    Spring Boot中文文档.rar

    28.4.2.Servlet上下文初始化 扫描Servlet,过滤器和侦听器 28.4.3.ServletWebServerApplicationContext 28.4.4.自定义嵌入式Servlet容器 程序化定制 直接自定义...

    springcloud seata-at linux普通 快速配置迁移

    分布式应用,每个单独的应用对应一个独立的数据源,每个服务内部的数据一致性由本地事务保证,但是全局数据一致性无法得到保障 Seata是alibaba开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用...

    Spring面试题

    ☆ Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。 ☆ Spring AOP:通过配置管理特性,Spring AOP ...

    spring-Quartz(作业调度)

    虽然可以通过属性文件(在属性文件中可以指定 JDBC 事务的数据源、全局作业和/或触发器侦听器、插件、线程池,以及更多)配置 Quartz,但它根本没有与应用程序服务器的上下文或引用集成在一起。结果就是作业不能访问...

    springboot参考指南

    配置一个数据源 ii. 67.2. 配置两个数据源 iii. 67.3. 使用Spring Data仓库 iv. 67.4. 从Spring配置分离@Entity定义 v. 67.5. 配置JPA属性 vi. 67.6. 使用自定义的EntityManagerFactory vii. 67.7. 使用两个Entity...

Global site tag (gtag.js) - Google Analytics