mvn install:install-file -Dfile=myArtifact.jar -DgroupId=x.y.z -DartifactId=${artifactId} -Dversion=${version} -Dpackaging=jar -DgeneratePom=true
首先需要引入weblogic客户端jar包:
<dependency>
<groupId>weblogic</groupId>
<artifactId>wlclient</artifactId>
<version>1.0.0</version>
</dependency>
wlclient.jar在maven中央仓库是没有资源的,需要手动下载wlclient的jar,然后通过maven命令打入到本地仓库。mvn安装jar到本地仓库的命令为:
|
<dependency>
<groupId>weblogic</groupId>
<artifactId>wlclient</artifactId>
<version>1.0.0</version>
<systemPath>${basedir}/path/to/library/wlclient-1.0.0.jar</systemPath>
<scope>system</scope>
</dependency>
下面为Springboot 中JMS的配置:
package com.sgm.ici.personalization.ms;
import java.util.Properties;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.listener.DefaultMessageListenerContainer;
import org.springframework.jndi.JndiObjectFactoryBean;
import org.springframework.jndi.JndiTemplate;
import com.sgm.ici.personalization.ms.service.util.MyMessageListener;
@Configuration
public class JmsConfiguration{
private StringuserName ="cmat";
private StringconnectionFactory ="jms/IDMTopicConnectionFactory";
private Stringpassword ="Pass1234";
private Stringtopic ="jms/IDMICITopic";
private Stringurl ="t3://10.203.25.58:7003";
@Autowired
private MyMessageListenermyMessageListener;
@Bean(name ="weblogicJms")
public JndiTemplate weblogicJms(){
Properties props =new Properties();
props.setProperty("java.naming.factory.initial","weblogic.jndi.WLInitialContextFactory");
props.setProperty("java.naming.provider.url",url );
props.setProperty("java.naming.security.principal",userName);
props.setProperty("java.naming.security.credentials",password);
JndiTemplate jmsJndiTemplate =new JndiTemplate();
jmsJndiTemplate.setEnvironment(props);
returnjmsJndiTemplate;
}
@Bean(name ="jmsConnectionFactory")
public JndiObjectFactoryBean jmsConnectionFactory(){
JndiObjectFactoryBean jndiObjectFactoryBean =new JndiObjectFactoryBean();
jndiObjectFactoryBean.setJndiName(connectionFactory);
jndiObjectFactoryBean.setJndiTemplate(weblogicJms());
returnjndiObjectFactoryBean;
}
@Bean(name ="jmsDestination")
public JndiObjectFactoryBean jmsDestination(){
JndiObjectFactoryBean jmsDestination =new JndiObjectFactoryBean();
jmsDestination.setJndiName(topic);
jmsDestination.setJndiTemplate(weblogicJms());
returnjmsDestination;
}
@Bean(name ="listenerTopic")
@ConditionalOnMissingBean
public DefaultMessageListenerContainer listenerTopic(){
DefaultMessageListenerContainer listener = new DefaultMessageListenerContainer();
listener.setConnectionFactory((ConnectionFactory) jmsConnectionFactory().getObject());
listener.setDestination((Destination) jmsDestination().getObject());
listener.setAutoStartup(true);
listener.setPubSubDomain(true);
listener.setMessageListener(myMessageListener);
returnlistener;
}
@Bean(name ="jmsTemplate" )
@ConditionalOnMissingBean
public JmsTemplate getJmsTemplate(){
JmsTemplate jmsTemplate =new JmsTemplate();
jmsTemplate.setConnectionFactory((ConnectionFactory) jmsConnectionFactory().getObject());
jmsTemplate.setDefaultDestination((Destination) jmsDestination().getObject());
jmsTemplate.setPubSubDomain(true);
jmsTemplate.setExplicitQosEnabled(true);
returnjmsTemplate;
}
}
因为我的项目中会默认初始化一个JmsTemplate 所以我这里加了@ConditionalOnMissingBean表示在当前上下文中不存在某个对象时,才会实例化一个Bean,不然会导致spring容器中存在两个相同类型的bean而启动报错。我这里采用的订阅topic的模式,当然也可以监听一个queue,
这里我就不做多个解释,其实是一模一样的配置。
MyMessageListener 类异步监听topic内的消息,如果有消息进来会自动消费:
package com.sgm.ici.personalization.ms.service.util;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import org.springframework.stereotype.Component;
@Component
public class MyMessageListenerimplements MessageListener{
@Override
public void onMessage(Message message) {
if (messageinstanceof TextMessage) {
try {
String msg = ((TextMessage)message).getText();
System.out.println("ok--"+msg);
//JSONObject.parseObject("",clazz);
} catch (JMSExceptione) {
thrownew RuntimeException(e);
}
} else {
thrownew IllegalArgumentException(
"Message must be of type TestMessage");
}
}
}
测试JMS类 :
package com.sgm.ici.personalization.ms.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping(value = "/")
public class JmsController {
@Autowired
@Qualifier("jmsTemplate")
private JmsTemplatejmsTemplate;
@RequestMapping(value ="/sendMsg", method = RequestMethod.GET)
@ResponseBody
public Object loginOut(HttpServletRequestreq, HttpServletResponse resp){
jmsTemplate.convertAndSend("hello world " +System.currentTimeMillis() );
returnnull;
}
}
所有springboot的dependencies:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<ici.version>0.0.1-SNAPSHOT</ici.version>
<ojdbc6.version>11.2.0.1.0</ojdbc6.version>
<druid.version>1.0.24</druid.version>
<mybatis-spring.version>1.2.0</mybatis-spring.version>
<swagger.version>2.6.1</swagger.version>
<pagehelper.version>1.1.2</pagehelper.version>
<orderby-helper.version>0.0.2</orderby-helper.version>
<mapper-spring-boot.version>1.1.0</mapper-spring-boot.version>
<cglib.version>2.2</cglib.version>
<log4j.version>2.6.2</log4j.version>
<mockito.version>2.6.2</mockito.version>
<auth.center.version>1.0.0-SNAPSHOT</auth.center.version>
<poi.version>3.17</poi.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>logback-classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>${ojdbc6.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.version}</version>
<exclusions>
<exclusion>
<artifactId>mybatis-spring-boot-starter</artifactId>
<groupId>org.mybatis.spring.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${mapper-spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>${cglib.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</dependency>
<dependency>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>weblogic</groupId>
<artifactId>wlthint3client</artifactId>
<version>10.3.6.0</version>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>0.9.0</version>
</dependency>
</dependencies>