您的位置:首页 > 编程语言 > Java开发

spring-boot+dubbo+spring-data-jpa搭建分布式中的坑(空指针,404等)

2018-01-23 18:29 543 查看

一、spring-boot支持jsp

1. 引入依赖支持jsp和jstl的依赖

<!--支持jstl-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!--支持jsp-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>



2.补全webapp目录结构

(1)手动创建webapp/WEB-INF目录结构



(2)在application.properties中配置如下

#springmvc视图解析
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
#关闭thymeleaf缓存
spring.thymeleaf.cache=false
#关闭thymeleaf模板
spring.thymeleaf.enabled=false


二、spring-boot的坑

(1)spring-boot会默认加载数据源相关信息

 >>单独拆分出来的web层不需要与数据库打交道,所以需要配置exclude属性

@SpringBootApplication(exclude ={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})


(2)spring-boot会默认会扫描main函数所在包及子包的注解,Controller,Service等

 >>a. 需要扫描的包放在入口程序所在包及子报下

 >>b. 或者手动指定

(3)请求能正常进入Controller,但是视图返回 404

 >> 使用spring-boot的插件运行即可(不要使用main函数运行程序)




三、注解配置dubbo,解决注入的service空指针问题(数据源等配置不再赘述)

(1)引入依赖

<!--dubbo-->
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>RELEASE</version>
</dependency>
<!--zookeeper-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>

(2)注解

>>服务 ,使用dubbo包的 @Service

import com.alibaba.dubbo.config.annotation.Service;
@Service
public class ItemServiceImpl implements ItemService {

## Dubbo 服务提供者配置
spring.dubbo.application.name=tt-taotao-service
spring.dubbo.registry.address=zookeeper://192.168.25.128:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.scan=com.tt.manage.dubbo.impl
spring.dubbo.application.registries.timeout=600000

>>调用,使用@Reference

@Controller
public class ItemController {
@Reference
private ItemService itemService;

#Dubbo服务消费者配置
spring.dubbo.application.name=tt-manage-web
spring.dubbo.registry.address=zookeeper://192.168.25.128:2181
spring.dubbo.scan=com.tt.manage.dubbo


(3)@Reference,spring不认识,然后dubbo也无法读取,导致无法注入,出现空指针。

 >> 解决:从包结构上保证Controller所在包(服务调用者所在的包)是 服务接口所在包的子包

服务接口所在包:



web层Controller所在包:



>> 这样,dubbo先读取注解,然后spring扫描注解,就可以正常注入了

四、未解决问题

@Transaction注解生成的代理类中,dubbo无法读取@Reference注解,还是会出现空指针
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring-boot dubbo