使用dubbo的service注解可以注册服务到zookeeper,使用dubbo的refrence注解,可以把远程调用的服务注入实例。
也就是说:当项目的service需要暴露时,就使用dubbo的service,否则就使用spring的service。当然喽,使用不同的service就得使用不同的扫描包配置。dubbo的service对应dubbo的扫描包方式,spring的service对应spring的扫描包方式。
当项目的service不需要暴露时,就使用spring的service注解。需要引用dubbo暴露的服务时,使用dubbo的refrence注解。
下面就是代码和配置文件了,看的人,还望给点建议。
配置文件结构:
spring-mybatis配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">
<context:property-placeholder location="classpath:db.properties"/>
<!--https://blog.csdn.net/zz210891470/article/details/68949525-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="url" value="${db.url}" />
<property name="driverClassName" value="${db.driver}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
<property name="filters" value="${db.filters}"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="spring/mybatis-config.xml"/>
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="dubbo.wk.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
</beans>
mybatis-config配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
<typeHandlers>
<typeHandler javaType="dubbo.wk.model.domain.enmus.SexEnums" handler="dubbo.wk.dao.config.SexEnumHandler"/>
</typeHandlers>
</configuration>
spring-context配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mybatis="http://mybatis.org/schema/mybatis-spring" xmlns:mvc="http://www.alibaba.com/schema/stat"
xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd http://www.alibaba.com/schema/stat http://www.alibaba.com/schema/stat.xsd">
<import resource="spring-mybatis.xml"/>
<import resource="classpath:dubbo-provider.xml"/>
</beans>
dubbo-previder配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--<!–搭建dubbo环境的第一次配置–>-->
<!--<dubbo:application name="dubbo-consumer"/>-->
<!--<dubbo:registry address="zookeeper://localhost:2181"/>-->
<!--<bean id="demoService" class="dubbo.wk.service.impl.DemoServiceImpl"/>-->
<!--<dubbo:service interface="dubbo.wk.service.IDemoService" ref="demoService"/>-->
<dubbo:protocol name="dubbo" port="20891"/>
<dubbo:provider timeout="3000"/>
<dubbo:application name="dubbo-provider"/>
<dubbo:registry address="zookeeper://localhost:2181"/>
<dubbo:annotation package="dubbo.wk.service.impl" />
</beans>
消费者项目配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--搭建dubbo环境的第一次配置-->
<!--<dubbo:application name="dubbo-consumer"/>-->
<!--<dubbo:registry address="zookeeper://localhost:2181"/>-->
<!--<dubbo:reference id="demoService" interface="dubbo.wk.service.IDemoService"/>-->
<!--<bean id="demoController" class="dubbo.wk.controller.DemoController">-->
<!--<property name="iDemoService" ref="demoService"/>-->
<!--</bean>-->
<!--****************************************************-->
<dubbo:annotation/>
<dubbo:application name="dubbo-consumer"/>
<dubbo:registry protocol="zookeeper" address="zookeeper://localhost:2181" register="true"/>
<dubbo:protocol port="20895" name="dubbo"/>
</beans>
消费者的spring-context配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mybatis="http://mybatis.org/schema/mybatis-spring" xmlns:mvc="http://www.alibaba.com/schema/stat"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd http://www.alibaba.com/schema/stat http://www.alibaba.com/schema/stat.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<import resource="classpath:dubbo-consumer.xml"/>
<context:component-scan base-package="dubbo.wk.service.impl"/>
</beans>
提供者测试类
@com.alibaba.dubbo.config.annotation.Service
public class DemoServiceImpl implements IDemoService {
@Autowired
private UserMapper userMapper;
@Override
public DemoRemoteModel findDemoModel() {
DemoRemoteModel model = new DemoRemoteModel();
model.setId(1L);
UserEntity userEntity = userMapper.findByPrimaryKey(1L);
model.setUserName(userEntity.getUserName());
model.setId(userEntity.getId());
return model;
}
}
public class provider {
public static void main(String[] args)throws Exception {
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("classpath:spring/spring-context.xml");
context.start();
System.out.println("提供者启动成功!");
System.in.read();
}
}
消费者测试类
public class consumer {
public static void main(String[] args) {
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("classpath:spring/spring-context.xml");
CourseService iDemoService = context.getBean(CourseService.class);
DemoRemoteModel model = iDemoService.findDemoModel();
System.out.println(model.getUserName());
}
}
@org.springframework.stereotype.Service
public class CourseServiceImpl implements CourseService {
@com.alibaba.dubbo.config.annotation.Reference
private IDemoService iDemoService;
@Override
public CourseEntity findCourseByPrimeryKey(Long id) {
return null;
}
@Override
public DemoRemoteModel findDemoModel() {
return iDemoService.findDemoModel();
}
}