`

201. Spring Boot JNDI:Spring Boot中怎么玩JNDI

阅读更多
 

 

【视频&交流平台】

àà悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战http://t.cn/A6ZarrqS

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

 

历史相关文章:

199. Spring Boot JNDI:这是虾米?

200. Spring Boot JNDI:在Tomcat中怎么玩JNDI?

 

 

说明:

(1)Spring Boot 版本:2.0.2.RELEASE

(2)Tomcat版本:8.0.28

 

前言:

       在上一篇文章中花了不少时间介绍了Tomcat中怎么玩JNDI,来重点来了,在Spring Boot中是怎么玩的呢???

 

一、Spring Boot老版本怎么玩?

       在比较老的Spring Boot中是怎么玩的,大体的思路是:

(1)注入TomcatFactory工厂类,获取到上下文Context,往上下文中设置resource对象。

(2)注入jndi DataSource。

       具体代码如下(手机端支持左右滑动):

    @Bean
   public TomcatEmbeddedServletContainerFactory tomcatFactory() {
       return new TomcatEmbeddedServletContainerFactory() {
           @Override
           protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
                   Tomcat tomcat)
{
               tomcat.enableNaming();
               return super.getTomcatEmbeddedServletContainer(tomcat);
           }
           @Override
           protected void postProcessContext(Context context) {
               ContextResource resource = new ContextResource();
               resource.setName("jdbc/mydb");
               resource.setType(DataSource.class.getName());
               resource.setProperty("driverClassName", "com.mysql.jdbc.Driver");
               resource.setProperty("url", "jdbc:mysql://localhost:3306/mydb");
               resource.setProperty("username", "root");
               resource.setProperty("password","root");
               context.getNamingResources().addResource(resource);
           }
       };
   }
   @Bean
   public DataSource jndiDataSource() throws IllegalArgumentException, NamingException {
       JndiObjectFactoryBean bean = new JndiObjectFactoryBean();
       bean.setJndiName("java:comp/env/jdbc/mydb");
       bean.setProxyInterface(DataSource.class);
       bean.setLookupOnStartup(false);
       bean.afterPropertiesSet();
       return (DataSource)bean.getObject();
   }

 

二、Spring Boot 2.0版本怎么玩呢?

2.1 打包成war包

       通过上一篇文章,我们可以把配置放到tomcat/conf/context.xml里,那么在Spring Boot中,我们只要配置jndi指向的名称就可以了,对于这个点的,Spring Boot还是提供了相应的配置的,在application.properties添加如下配置:

spring.datasource.jndi-name=jdbc/mydb

或者是:

spring.datasource.jndi-name=java:comp/env/jdbc/mydb

       对于context.xml文件的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context >  
<Resource name="jdbc/mydb"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/mydb"
    username="root" password="root"
    maxActive="20" maxIdle="10"
    maxWait="10000"/>

</Context>

 

       然后打包成war包,在tomcat容器中进行运行,但我们不能每次都打包去测试,这样肯定会影响开发效率的,那么对于Embedded Tomcat的话,要怎么搞呢?

 

2.2 Embedded Tomcat

       对于Embedded Tomcat的话,需要添加ServletWebServerFactory进行配置:

@Bean
   public ServletWebServerFactory servletContainer() {
       TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
           @Override
           protected TomcatWebServer getTomcatWebServer(Tomcat tomcat) {
               tomcat.enableNaming();
               return super.getTomcatWebServer(tomcat);
           }
           @Override
           protected void postProcessContext(Context context) {
               ContextResource resource = new ContextResource();
               resource.setName("jdbc/mydb");
               resource.setType(DataSource.class.getName());
               resource.setProperty("driverClassName", "com.mysql.jdbc.Driver");
               resource.setProperty("url", "jdbc:mysql://localhost:3306/mydb");
               resource.setProperty("username", "root");
               resource.setProperty("password","root");
               context.getNamingResources().addResource(resource);
               super.postProcessContext(context);
           }
       };
       return tomcat;
   }

 

说明:

(1)对于SpringBoot 2.0是ServletWebServerFactory,旧一点的版本应该是TomcatEmbeddedServletContainerFactory,不然就会出现类无法找到了。

(2)tomcat.enableNaming():启用默认禁用的JNDI命名

(3)ContextResource:构建一个ContextResource对象,然后添加到Context对象中。

 

在application.properties添加如下配置:

spring.datasource.jndi-name=jdbc/mydb

到这里就可以使用jndi构建的DataSource了。

 

2.3 Embedded Tomcat+context.xml尝试

       我们知道对于context.xml有一种局部配置的方式是放到/META-INF/context.xml下的,那么对于Spring Boot目前支持这种方式嘛,经测试结果不支持,会报如下的错误:

Failed to look up JNDIDataSource with name 'jdbc/mydb'; nested exception isjavax.naming.NoInitialContextException: Need to specify class name inenvironment or system property, or as an applet parameter, or in an applicationresource file: java.naming.factory.initial

       不支持的话,目前也只能等官方进行升级了,或者聪明的你还有别的方式?

 

à悟空学院:https://t.cn/Rg3fKJD

 

下雨天,适合学「Spring Boot」

 

微信公众号「SpringBoot最近更新:

 

Java8新特性:方法引用
209. SpringBoot quartz:sqlserver启动只有 DECLARE CURSOR 才允许使用...
风口之上,我是那头猪嘛?
Java8新特性:Lambda表达式: 摸摸里面
Java8新特性:Lambda表达式:过关斩将:使用场景
Java8新特性:Lambda表达式:小试牛刀
下雨天,适合学「Spring Boot」
Java8新特性:接口的默认方法
208. Spring Boot Swagger2:排序 – 漂游记
207. Spring Boot Swagger2:极简方式
我读的书很多,但都没有你好看【一禅录】
206. Spring Boot 2.0 Swagger2:使用
205. Spring Boot 2.0 Swagger2:初识Swagger
当要离开的时候,我却动情了
205. jetcache:你需要知道的小技巧
204. jetcache:在Spring Boot中怎么玩?

 搜索springboot或者扫描以下二维码即可关注:

 

 

分享到:
评论

相关推荐

    Spring boot 配置参数一览.pdf

    Spring Boot 是一个开源的 Java 基础框架,主要用于快速、简便地...此外,Spring Boot还支持通过命令行参数、环境变量、JNDI、Servlet上下文参数等多种方式设置配置参数。这为不同的部署和运行环境提供了极大的灵活性。

    spring-boot-reference.pdf

    Spring Boot Documentation 1. About the Documentation 2. Getting Help 3. First Steps 4. Working with Spring Boot 5. Learning about Spring Boot Features 6. Moving to Production 7. Advanced Topics II. ...

    Spring Boot中文文档.rar

    spring boot中文文档,从安装到部署。 I. Spring Boot文件 1.关于文档 2.获得帮助 3.第一步 4.使用Spring Boot 5.了解Spring Boot功能 6.转向生产 7.高级主题 II。入门 8.介绍Spring Boot ...

    spring-boot源码

    6. **环境与配置**:Spring Boot支持命令行参数、属性文件、系统属性、JNDI、YAML等多种方式来加载和管理配置。`Environment`对象包含了所有的配置信息,可以通过`@Value`注解注入到bean中。 7. **条件化bean**:`@...

    spring 配置jndi

    &lt;bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"&gt; &lt;property name="jndiName" value="java:comp/env/jdbc/MyDataSource" /&gt; ``` 或者使用Spring的Java配置: ```java @...

    activemq 普通版和spring版

    5. Spring Boot集成:如果jmsspring使用了Spring Boot,那么配置可能会更简洁,通过自动配置特性,只需少量代码或配置就能实现ActiveMQ的连接和使用。 总结来说,这个项目提供了ActiveMQ在两种不同使用场景下的示例...

    spring相关的xsd文件

    Spring框架是Java应用程序开发中的一个核心组件,尤其在企业级应用中广泛使用。它通过提供模块化的结构,...在实际项目开发中,结合Spring Boot和Spring Cloud等现代工具,可以进一步提升开发效率和应用的可维护性。

    activiti6.0用户手册,pdf英文版

    13. Spring Boot集成:手册会专门介绍如何在Spring Boot环境中使用Activiti,包括兼容性问题、开始使用、修改数据库和连接池配置、REST支持、JPA支持等。 由于文件中包含大量的数字和点符号,可能是由于文档扫描或...

    Springboot 动态多数据源 jta分布式事务

    在IT行业中,Spring Boot是一个非常流行的Java开发框架,它简化了Spring应用的初始搭建以及开发过程。本资源针对的是Spring Boot动态多数据源和JTA(Java Transaction API)分布式事务的实现,对于初学者来说非常...

    springboot参考指南

    Spring Boot文档 i. 1. 关于本文档 ii. 2. 获取帮助 iii. 3. 第一步 iv. 4. 使用Spring Boot v. 5. 了解Spring Boot特性 vi. 6. 迁移到生存环境 vii. 7. 高级主题 3. II. 开始 i. 8. Spring Boot介绍 ii. 9. 系统...

    Websphere Application Server 部署Spring Boot项目源码.zip

    6. **配置数据源**:在WAS管理控制台中,配置一个数据源连接到Oracle数据库,确保JNDI名称与Spring Boot应用配置中使用的名称一致。 7. **测试应用**:部署完成后,通过WAS的URL访问应用,确保一切正常工作。可能...

    java7hashmap源码-spring-boot:弹簧靴

    spring-boot 1.总览 ​ spring ioc 实现方式JNDI DI是EJB容器的注入 ​ spring aop 事务简化 ​ spring mvc 2.入门 创建springboot 项目 打成jar包,解压 META-INF目录下 MANIFEST.MF org.springframework.boot....

    Tomcat中文帮助文档.rar

    1. Spring Boot:Spring Boot内置了Tomcat,简化了微服务的部署和管理。 2. 数据库连接:通过JNDI方式配置数据源,方便与各种数据库(如MySQL、Oracle等)集成。 总结,这份"Tomcat中文帮助文档"全面介绍了Tomcat...

    [课堂课件讲解]Java微服务实践-Spring Boot 测试.pptx

    在 Spring Boot 中,我们可以使用 JNDI 来访问应用程序中的资源。 Servlet API Servlet API 是指 Java Servlet 规范。Servlet 是指一个小型的 Java 程序,用于处理 HTTP 请求。在 Spring Boot 中,我们可以使用 ...

    weblogic 实用手册+Weblogic

    1. Spring框架集成:WebLogic支持Spring应用程序,可以与Spring Boot、Spring Security等配合使用。 2. Oracle Fusion Middleware:WebLogic是Oracle中间件的重要组成部分,可以与Oracle SOA Suite、Oracle ...

    J2EE面试题(包含了大部分的框架面试题如:hibernate Spring Strust 等)

    5. Spring Boot的快速开发特性,自动配置和Starter POMs的使用。 Struts则是经典的MVC框架,面试中可能会涉及: 1. Struts 2的基本架构:Action、Result、Interceptor和ValueStack等概念。 2. Struts 2的拦截器...

    jboss配置MySql的JNDI

    在IT领域,特别是Java应用服务器环境下,JBoss与MySQL数据库的集成是常见需求之一,而JNDI(Java Naming and Directory Interface)在此过程中扮演着关键角色。本文将深入解析如何在JBoss中配置MySQL的JNDI数据源,...

    medicine_management.zip

    1. **.rebel.xml.bak**:这通常是Spring Boot的ZKRebel配置文件备份,用于热部署应用代码。 2. **.gitignore**:定义了版本控制系统Git应忽略的文件和目录。 3. **medicine_management.iml**:这是IntelliJ IDEA项目...

    spring boot jsm ibmmq topic queue

    在IT行业中,Spring Boot是一个非常流行的Java开发框架,它简化了Spring应用的初始搭建以及开发过程。而JMS(Java Message Service)是Java平台中用于创建、发送、接收和读取消息的标准API,广泛用于企业级分布式...

    tomcat连接池mysql多种配置

    在Java Web开发中,Tomcat作为一款广泛应用的Servlet容器,其性能优化往往涉及到数据库连接池的配置。连接池是管理数据库连接的一种技术,它可以提高应用性能,减少数据库资源的浪费。本文将深入探讨如何在Tomcat中...

Global site tag (gtag.js) - Google Analytics