Spring MVC XML Configuration for Apache Dubbo Service Provider and Consumer

  1. Provider Side – Service & Data Layer

1.1 Mavan Dependencies

<dependencies>
    <!-- ZooKeeper client -->
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>${zk.version}</version>
    </dependency>

    <!-- Dubbo & Curator -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>${dubbo.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>${curator.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>${curator.version}</version>
    </dependency>

    <!-- MyBatis & DB -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>${mybatis.version}</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>${mybatis-spring.version}</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${druid.version}</version>
    </dependency>

    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- Logging -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
</dependencies>

1.2 Data Access

public interface AccountMapper {
    Account selectByPrimaryKey(@Param("id") Integer id);
}

<mapper namespace="com.demo.mapper.AccountMapper">
    <select id="selectByPrimaryKey" parameterType="int" resultType="com.demo.domain.Account">
        SELECT id, username, email
        FROM t_account
        WHERE id = #{id}
    </select>
</mapper>

1.3 Service Layer

public interface AccountService {
    Account getAccount(Integer id);
}

@Service
public class AccountServiceImpl implements AccountService {

    @Autowired
    private AccountMapper accountMapper;

    @Override
    public Account getAccount(Integer id) {
        return accountMapper.selectByPrimaryKey(id);
    }
}

1.4 Spring & Dubbo XML

dubbo-provider.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="... ...">

    <dubbo:application name="account-provider"/>
    <dubbo:registry address="zookeeper://192.168.10.101:2181"/>
    <dubbo:protocol name="dubbo" port="20880"/>

    <dubbo:service interface="com.demo.api.AccountService"
                   ref="accountService"
                   timeout="1200000"/>

    <bean id="accountService" class="com.demo.service.AccountServiceImpl"/>
</beans>

spring-dao.xml

<context:property-placeholder location="classpath:db.properties"/>

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="typeAliasesPackage" value="com.demo.domain"/>
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.demo.mapper"/>
</bean>

spring-service.xml

<context:component-scan base-package="com.demo.service"/>
<tx:annotation-driven/>
<bean id="transactionManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

Deploy the provider on Tomcat listening on port 8080.

  1. Consumer Side – Web Layer

2.1 Maven Dependencies

<dependencies>
    <!-- Shared API module -->
    <dependency>
        <groupId>com.demo</groupId>
        <artifactId>account-api</artifactId>
        <version>1.0.0</version>
    </dependency>

    <!-- ZooKeeper & Dubbo -->
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>${zk.version}</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>${dubbo.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>${curator.version}</version>
    </dependency>

    <!-- Spring MVC & JSON -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson.version}</version>
    </dependency>
</dependencies>

2.2 REST Controller

@RestController
@RequestMapping("/api/account")
public class AccountController {

    @Autowired
    private AccountService accountService;

    @GetMapping("/{id}")
    public Account fetch(@PathVariable Integer id) {
        return accountService.getAccount(id);
    }
}

2.3 Spring MVC & Dubbo XML

spring-mvc.xml

<context:component-scan base-package="com.demo.controller"/>
<mvc:annotation-driven/>

dubbo-consumer.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="... ...">

    <dubbo:application name="account-consumer"/>
    <dubbo:registry address="zookeeper://192.168.10.101:2181"/>
    <dubbo:consumer check="true"/>

    <dubbo:reference id="accountService"
                     interface="com.demo.api.AccountService"/>

    <bean id="accountController" class="com.demo.controller.AccountController">
        <property name="accountService" ref="accountService"/>
    </bean>
</beans>

Start the consumer on Tomcat porrt 8081. Access http://localhost:8081/api/account/1 to verify the integration.

Tags: Apache Dubbo Spring MVC ZooKeeper MyBatis RESTful API

Posted on Fri, 05 Jun 2026 18:19:08 +0000 by johnsmith153