基于SSM框架的dubbo的分布式框架搭建——mybatis,spring,dubbo整合

爱情就在不经意间遇到了。dubbo的注入为空问题一不留神也就解决了。前面那句解释不了,后面的请听我道来。

       当dubbo的refrence注入为空时,网上说了spring-mvc的上下文和spring的上下文是不一样的。当把dubbo服务的注入实例放到了spring的上下文。而用spring-mvc的上下文去调用dubbo服务的实例时,是注入不进去的。


然而哥搭建的dubbo应用框架,并没有spring-mvc,就一个spring。苦恼啊,郁闷啊,最后请教了公司的美丽程序媛依旧没解决。然后去公司的 各个同事那转悠转悠,突然,代码给了我一个眼神,我发现了refrence这个注解不是dubbo的注解,我写错了。。。。。。

先总结,后代码

使用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();
    }
}




猜你喜欢

转载自blog.csdn.net/wgp15732622312/article/details/80161001