【视频&交流平台】
àà悟空学院: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
历史相关文章:
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
微信公众号「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 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中文文档,从安装到部署。 I. Spring Boot文件 1.关于文档 2.获得帮助 3.第一步 4.使用Spring Boot 5.了解Spring Boot功能 6.转向生产 7.高级主题 II。入门 8.介绍Spring Boot ...
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. 系统...
spring-boot 1.总览 spring ioc 实现方式JNDI DI是EJB容器的注入 spring aop 事务简化 spring mvc 2.入门 创建springboot 项目 打成jar包,解压 META-INF目录下 MANIFEST.MF org.springframework.boot....
dev.jndi.name ii。 dev.driver.class.name(如果不使用mySql数据库,请记住也要更新pom.xml)iii。 dev.url iv。 dev.username v.dev.password 在启动过程中,它将尝试对数据源执行JNDI查找 代码默认实现是使用...
jboss配置MySql的JNDI
提供对Mybatis-Plus,Quartz,ShardingJdbc,P6sy,Jndi等组件的集成方案。 提供 自定义数据源来源 方案(如全从数据库加载)。 提供项目启动后 动态增加移除数据源 方案。 提供Mybatis环境下的 纯读写分离 方案。 ...
提供对Mybatis-Plus,Quartz,ShardingJdbc,P6sy,Jndi等组件的集成方案。 提供 自定义数据源来源 方案(如全从数据库加载)。 提供项目启动后 动态增加移除数据源 方案。 提供Mybatis环境下的 纯读写分离 方案。 ...
弹簧启动jboss7 如何使用带有JNDI的数据源在JBoss AS 7上部署Spring Boot应用程序 有关更多信息,请参见Wiki或发送电子邮件至
一个基于springboot的快速集成多数据源的启动器简介dynamic-datasource-spring-boot-starter是一个基于springboot的快速集成多数据源的启动器。其支持Jdk 1.7 +,SpringBoot 1.4.x 1.5.x 2.xx。文件| 文献资料|特性...
弹簧启动mvc-sec-db-wf 一个简单的Spring-Boot-MVC应用程序,在Wildfly服务器上具有PostGresSQL数据库JNDI身份验证这是一个Netbeans Maven项目。 它是作为Spring-Boot-MVC( )网站的基础而建立的,该网站托管在...
spring boot jsp war打包问题,自定义logback日志,jndi打印问题
如验证Web客户端使用NTLMv2协议的HttpSecurityService实现单点登录(SSO),其能够实现和saslclient NTLMv2的HttpURLConnection,可以添加NTLMv2身份验证和加密传输到Oracle JNDI LDAP实现。 Jespa适合Win7以上AD...
springboot-密钥斗篷演示 第一步:部署keycloak的单机模式服务器 下载keycloak-2.5.1.Final.tar.gz包,和解压 cd keycloak-2.5.1.Final/keycloak 启动数据库mysql ...datasource jndi-name="java:jboss/d
主要介绍了SpringBoot2.x入门教程之引入jdbc模块与JdbcTemplate简单使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
1、命令行参数 2、来自java:comp/env的JNDI属性 3、Java系统属性(System.getProperties()) 4、操作系统环境变量 5