参考链接
https://blog.csdn.net/qq_17058993/article/details/83106182
一 背景:
springboot项目、oracle数据库、jboss-eap7.1(或者wildfly-18.0.1.Final都介意)、jdk8
1 springboot有内置tomcat,若是要用jboss jndi部署,则他设置为provide,防止打包打入 pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
2 由于采用JNDI配置数据源,因此原本在application.properties设置的连接数据库信息spring.datasource这些都可以注释掉,选择在jboss的standlone.xml中配置
3 Application.java要改为继承SpringBootServletInitializer才可以部署
@SpringBootApplication
public class Application extends SpringBootServletInitializer{
public static void main(String[] args) {
final SpringApplication application = new SpringApplication(com.foresealife.pm.Application.class);
application.run(args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
{
return application.sources(Application.class);
}
}
4 由于采用JNDI配置,因此我程序要加入数据源JNDI的引入信息,我选择在Application.java的同级目录下新增一个文件 RootConfig.java
这是第一种方式。也可以直接在properties加个配置,两种方式都行
第一种方式在application.properties添加
spring.datasource.jndi-name=java:/TxLife
第二种方式新增一个文件 RootConfig.java
import org.springframework.boot.autoconfigure.quartz.SchedulerFactoryBeanCustomizer;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.annotation.Order;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jndi.JndiObjectFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
@Configuration
@EnableTransactionManagement
@EnableCaching
@Order(0)
public class RootConfig {
private static final String JNDI_NAME = "java:/TxLife";
@Bean
@Primary
public JndiObjectFactoryBean jndiDataSource(){
JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
jndiObjectFactoryBean.setJndiName(JNDI_NAME);
return jndiObjectFactoryBean;
}
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public SchedulerFactoryBeanCustomizer customizeQuartz(DataSource dataSource)
{
return schedulerFactoryBean -> schedulerFactoryBean.setDataSource(dataSource);
}
}
==================================================
以上是java项目要做的准备,接下来是jboss部署的配置
二 添加连接oracle用的jar包依赖
在modules下新增com/oracle/main文件夹,新增数据库驱动包ojdbc,这个驱动包在自己安装的oracle本地路径中:oraclexe\app\oracle\product\xxx版本号\server\jdbc\lib
module.xml文件内容为
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="com.oracle">
<resources>
<resource-root path="ojdbc8-12.2.0.1.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.resource.api"/>
<module name="javax.transaction.api"/> <!-- See * below -->
</dependencies>
</module>
三、配置数据源与驱动
jdbc:oracle:thin:@127.0.0.1:1521:XE // 127.0.0.1是本机地址,XE是精简版Oracle的默认数据库名
打开文件%JBOSS_HOME%/standalone/configuration/standalone.xml,全文搜索”datasources”,可以找到如下标签: h2可以不用管,直接加在他前面,加一个DataSource以及driver
<subsystem xmlns="urn:jboss:domain:datasources:5.0">
<datasources>
<datasource jndi-name="java:/TxLife" pool-name="TxLife">
<connection-url>jdbc:oracle:thin:@127.0.0.1:1521:XE</connection-url>
<driver>oracle</driver>
<pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>50</max-pool-size>
</pool>
<security>
<user-name>adsffdsa</user-name>
<password>fdsafdsa</password>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
<validate-on-match>true</validate-on-match>
<background-validation>false</background-validation>
<stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
</validation>
</datasource>
<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
<drivers>
<driver name="oracle" module="com.oracle">
<xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
</driver>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
</subsystem>
添加部分为
四启动服务器
1 将生成的war放\jboss-eap-7.1\standalone\deployments 下
2 双击-eap-7.1\bin\standalone.bat即可完成启动
很多时候数据库源配置不成功,导致部署一直出问题,我们可以选择先不部署单元,直接启动jboss服务器,在控制台查看是否服务器启动成功即可。(即少掉放在deployment部署文件,你也可以选择不。。)
双击-eap-7.1\bin\standalone.bat即可完成启动后,打开127.0.0.1:8080
进入
3 点击Administration Console.第一次进入由于可能没有创建用户,进不去,可以双击\jboss-eap-7.1\bin\add-user.bat按照提示创建,就可以进入管理界面了
4找到自己配置的数据源进行测试。由于我界面都有水印,这张图片是网上,不同版本有一点点不一样。
出现下面表示连接成功