Spring Boot和WebLogic 12c
在針對WebLogic 12c執行Spring Boot應用程式時,您有兩個選擇:
- 從外部連線到WebLogic並在Tomcat或其他容器上獨立執行Spring Boot應用程式
- 將Spring Boot應用程式直接部署到WebLogic
1. 初始化InitialContext並從外部連線到WebLogic 12c:
@Bean public InitialContext webLogicInitialContextExt() { System.out.println("Initializing WL context!"); Hashtable<String, String> h = new Hashtable<String, String>(7); h.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); h.put(Context.PROVIDER_URL, "t3://localhost:7001"); h.put(Context.SECURITY_PRINCIPAL, "weblogic"); h.put(Context.SECURITY_CREDENTIALS, "weblogic123"); InitialContext ctx = null; try { ctx = new InitialContext(h); } catch (NamingException e) { e.printStackTrace(); } return ctx; } |
要執行它,您只需要將weblogic客戶端jar安裝為maven依賴項,避免發生“weblogic.jndi.WLInitialContextFactory”的ClassNotFoundException。
只需參考您的Oracle WebLogic安裝的server / lib資料夾並查詢wlthint3client.jar,它是一個最小的jar,包含連線到WLS和獲取一些JNDI內容的必要類的最小列表。我強烈建議透過maven安裝它以避免頭痛問題。
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \ -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> |
2. 在WebLogic 12c中執行的InitialContext和Spring Boot
如果您在WebLogic中執行Spring Boot應用程式,那麼初始化Context會更簡單:
@Bean public Context webLogicInitialContextServerSide() throws NamingException{ return new InitialContext(); } |
您無需指定工廠或URL。預設情況下,伺服器將使用WLInitialContextFactory類及其URL。
使用InitialContext透過JNDI獲取伺服器工件
讓我們建立一個簡單的應用程式,它將每秒將JMS訊息推送到JMS佇列中。
首先請參考伺服器端建立的InitialContext :(如果您希望來自外部WebLogic的InitialContext,只需將bean名稱更改為“webLogicInitialContextExt”)
@Resource(name =“webLogicInitialContextServerSide”) public Context ctx; |
整個傳送類:(適當配置你的JMS):
@Service public class JMSUtils { @Resource(name="webLogicInitialContextServerSide") public Context ctx; // Defines the JMS context factory. public final static String JMS_FACTORY="jms.hs.ConnectionFactory"; // Defines the queue. public final static String QUEUE="jms.hs.Test"; private QueueConnectionFactory qconFactory; private QueueConnection qcon; private QueueSession qsession; private QueueSender qsender; private Queue queue; private TextMessage msg; @Scheduled(fixedRate = 1000) public void sendIntoJMSQueue() throws Exception{ try { System.out.println("Initializing..."); init(ctx, QUEUE); Date currentTime = new Date(); System.out.println(currentTime); send(currentTime.toString()); } finally { close(); } } public void init(Context ctx, String queueName) throws NamingException, JMSException { qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY); qcon = qconFactory.createQueueConnection(); qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); queue = (Queue) ctx.lookup(queueName); qsender = qsession.createSender(queue); msg = qsession.createTextMessage(); qcon.start(); } /** * Sends a message to a JMS queue. * * @param message message to be sent * @exception JMSException if JMS fails to send message due to internal error */ public void send(String message) throws JMSException { msg.setText(message); qsender.send(msg); } /** * Closes JMS objects. * @exception JMSException if JMS fails to close objects due to internal error */ public void close() throws JMSException { qsender.close(); qsession.close(); qcon.close(); } } |
在WebLogic 12c上執行Spring Boot應用程式時,幾乎沒有任何問題
您的應用需要在src / main / webapp / WEB-INF資料夾中包含weblogic.xml描述符。其他地方不起作用。有關其他詳細資訊,請閱讀Spring-Boot部署到WebLogic。另外不要忘記設定以下依賴項:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> <exclusions> <exclusion> <artifactId>tomcat-embed-el</artifactId> <groupId>org.apache.tomcat.embed</groupId> </exclusion> </exclusions> </dependency> |
有了這個,您將確保嵌入式servlet容器不會干擾將部署war檔案的servlet容器。
測試:
- 安裝Weblogic 12c
- 使用JMS佇列“jms.hs.Test”和JMS連線工廠“jms.hs.ConnectionFactory”在那裡建立域
- git clone https://bitbucket.org/tomask79/spring-boot-weblogic-jms.git
- 將WAR從目標資料夾部署到WebLogic並啟動它
- 新訊息應出現在“jms.hs.Test”佇列中。
點選標題看原文!
相關文章
- Spring Boot Starter 和 ABP ModuleSpring Boot
- 使用Spring Boot和Elasticsearch教程Spring BootElasticsearch
- Spring Boot 事件和監聽Spring Boot事件
- Spring Boot 整合 Mybatis 和 MySQLSpring BootMyBatisMySql
- Spring boot入門(二):Spring boot整合MySql,Mybatis和PageHelper外掛Spring BootMySqlMyBatis
- Spring Boot:Spring Boot配置MybatisSpring BootMyBatis
- Spring MVC和Spring Boot的區別 - hackernoonMVCSpring Boot
- Spring框架和Spring boot有啥區別?框架Spring Boot
- Spring Boot 2和JPA入門Spring Boot
- Spring Boot和EventStoreDB事件溯源案例Spring Boot事件
- Spring Boot (十三): Spring Boot 小技巧Spring Boot
- Spring Boot(三):Spring Boot中的事件的使用 與Spring Boot啟動流程(Event 事件 和 Listeners監聽器)Spring Boot事件
- spring cloud+spring boot 電子商務-spring boot 引用方式${}和@@用法與區別CloudSpring Boot
- 深入淺出,Spring 框架和 Spring Boot 的故事框架Spring Boot
- Spring Boot系列十六 WebSocket簡介和spring boot整合簡單訊息代理Spring BootWeb
- Spring Boot:Spring Boot配置SwaggerSpring BootSwagger
- Spring Boot 2.0(八):Spring Boot 整合 MemcachedSpring Boot
- Spring Boot 參考指南(Spring Boot文件)Spring Boot
- Spring Boot學習6:Spring Boot JDBCSpring BootJDBC
- Spring Boot(十八):使用 Spring Boot 整合 FastDFSSpring BootAST
- Spring Boot(五):Spring Boot Jpa 的使用Spring Boot
- Jeecg-Boot Spring BootSpring Boot
- 開始使用GraphQL Java和Spring BootJavaSpring Boot
- GraphQL SPQR和Spring Boot入門 | baeldungSpring Boot
- 在 Spring Boot 中使用 JPA 和 MySQLSpring BootMySql
- Spring BootSpring Boot
- Spring Boot系列(四):Spring Boot原始碼解析Spring Boot原始碼
- Spring Boot系列(一):Spring Boot快速開始Spring Boot
- Spring Boot系列(一):Spring Boot 入門篇Spring Boot
- Spring Boot學習(一)——Spring Boot介紹Spring Boot
- Spring boot學習(三) Spring boot整合mybatisSpring BootMyBatis
- Spring Boot 2.0(四):使用 Docker 部署 Spring BootSpring BootDocker
- Spring Boot(十一):Spring Boot 中 MongoDB 的使用Spring BootMongoDB
- Spring Boot(十六):使用 Jenkins 部署 Spring BootSpring BootJenkins
- Spring Boot(三):Spring Boot 中 Redis 的使用Spring BootRedis
- Spring Boot(七):spring boot測試介紹Spring Boot
- Spring Boot/Spring MVCSpring BootMVC
- Spring Boot —— Spring SecuritySpring Boot