本人也是才開始接觸 阿里巴巴的開源分布式框架 dubbo,因為現在微服務框架 spring boot也非常的火,然后結合dubbo的官網搭建這個開發環境。
一、首先 zookeeper作為集群管理服務器,安裝和配置在這里就不說了
划分為 4個項目
項目目錄如下:
4個項目的依賴關系是:common里面暫時存放的只有user一個實體類,后面陸續會加上其他的公共類,分頁,驗證等,這個項目不依賴其他的項目,其他3個項目都需要依賴它,所有這個項目需要先打包(相信做個maven項目的人應該都會-----如果對項目有所改動的話,需要先 maven clean,然后再maven install);
第二個需要打包的是 app項目,service和web項目都依賴它,然后再打包service項目,最后web項目。
hlq-commer-common 項目目錄:
hlq-commer-app 就是單獨的一個service接口,因為只是搭建個環境,就只寫了一個service和 一個方法,
service 代碼如下:(就是根據用戶id獲取一個用戶的信息)
package com.commer.app.UserService;
import com.commer.app.entity.User;
public interface UserService {
//根據用戶id獲取用戶信息
User selectByPrimaryKey(Integer id);
}
hlq-commer-service 這個項目作為dubbo的一個服務提供者,最重要的就是暴露服務,數據庫的連接,mybatis的映射都在這
項目目錄:
App類作為dubbo的一個服務啟動類(發布服務,連接數據庫,指定映射文件),同時加載spring boot的配置文件,
主要代碼:
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.ImportResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.dubbo.config.annotation.Service;
@SpringBootApplication
@ComponentScan(basePackages = { "com.commer.app.service.impl" }, includeFilters = { @Filter(classes = { Service.class}) })
@ImportResource(locations = { "classpath:dubboprovider.xml" })
@MapperScan("com.commer.app.mapper")
public class App {
@Bean(initMethod = "init", destroyMethod = "close")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return new DruidDataSource();
}
@Bean
public SqlSessionFactory sqlSessionFactoryBean() throws Exception {
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:/mybatis-mapping/*Mapper.xml"));
return sqlSessionFactoryBean.getObject();
}
public static void main(String[] args) throws IOException {
SpringApplication.run(App.class, args);
System.out.println("服務運行中...");
System.in.read();
}
userMapper類(dao 類)
@Component
public interface UserMapper {
int deleteByPrimaryKey(Long id);
int insert(User record);
int insertSelective(User record);
//根據用戶id獲取用戶信息
User selectByPrimaryKey(Integer id);
}
這里需要注意的地方就是 @Component這個注解(表示該類給掃描組件),如果不加這個注解的話,UserServiceImpl @Resource獲取UserMapper Bean會是個空(這個是spring自己的一個掃描組件配置,可以自己去看下這方面的知識);
UserMapper.xml這里就不說了,不懂的同學可以去看看 mybatis的教程了解
然后先看 UserServiceImpl代碼:
主要注意紅色標注的地方,之前dubbo提供者發布的時候一直失敗,就是因為導入的是一個 spring自帶的一個 @service注解,一直沒注意這個地方,導致項目一直發布不了,因為作為一個dubbo服務提供者,啟動時需要知道發布的服務是在哪,不使用dubbo提供的@service注解。就會出現上面的問題。
application.properties(主要配置數據庫連接)
然后重點是 dubbo服務提供者的配置文件
注冊中心使用zookeeper,掃描所有的包並且發布。
最后就看 dubbo的一個服務消費者了,這里個人整合了 html 和jsp
首先看 啟動類 webStart:
紅色地方標注的是,啟動的時候測試userservice有沒有發布過來,成功的話會打印一個用戶姓名,下面注釋的部分用來配置攔截器和出現錯誤頁面的一個處理方法。
然后貼上控制器類和幾個測試的方法:
這里需要注意紅色標注的地方,之前一直使用的是下面的一個注解,然后注入 UserService bean的時候一直null,很分解,看過別人的dubbo案例,好多都是使用了下面那種注解,問題不曉得在哪(個人還是個菜雞)
下面MvcConfiguration類主要讓spring boot整合jsp,官方貌似提示 spring boot是不支持jsp的需要自己去整合。
然后后面重要的就是 dubbo服務消費者的配置文件了
配置文件還有什么不懂的同學,可以自己去dubbo官網看下官方文檔。
首先啟動App類,發布服務,再啟動zookeeper服務器,將dubbo服務提供者注冊到zookeeper集群中管理,然后再啟動webStart類整個過程就搭建完了。
pom文件需要下載jar包太慢的,可以講maven下載倉庫配置文件修改指向其阿里私有雲倉庫,個人用的也是阿里雲倉庫。
需要原碼的朋友可以留言給我 ,因為現在在整git 還沒將項目托管上去,整好了就給出來,希望大家一起加油!
今天上午整好了,附上githu地址:https://github.com/huliqin900/hlq-commer
繼續擼碼中 整合redis