具体划分为:
portal - provider 服务提供者
portal - consumer 服务消费者
manager-provider 服务提供者
manager-consumer 服务消费者
eureka-server-reg-center
feign-api
common
activiti - provider
以上工程,除了sp-parent 是 pom 工程外,其他的都是 jar 工程
根据架构图的内容进行依赖关系的配置
主启动类所在包:com.webcode.sp
实体类:com.webcode.sp.entities
工具类:com.webcode.sp.utils
Mapper接口:com.webcode.sp.mapper
Service接口:com.webcode.sp.service
Service实现类:com.webcode.sp.service.impl
Controller类:com.webcode.sp.controller
工厂类:com.webcode.sp.factory
不需要
不需要
不需要
10000
10001
10002
10003
80
10004
字段作用 字段名称 字段类型 字段长度
主键 member_id int
登录账号 login_acc varchar 100
登录密码 login_pwd varchar 100
欢迎信息中显示的昵称 nick_name varchar 100
真实姓名 real_name varchar 100
身份证号 card_num varchar 100
手机号 phone_num varchar 20
Email地址 email_addr varchar 100
账户类型 acc_type tinyint
备用字段1 extral_field_a varchar 300
备用字段2 extral_field_b varchar 300
备用字段3 extral_field_c varchar 300
备用字段4 extral_field_d varchar 300
CREATE TABLE `t_user` (
`member_id` int NOT NULL AUTO_INCREMENT ,
`login_acc` varchar(100) NULL ,
`login_pwd` varchar(100) NULL ,
`nick_name` varchar(100) NULL ,
`real_name` varchar(100) NULL ,
`card_num` varchar(100) NULL ,
`phone_num` varchar(20) NULL ,
`email_addr` varchar(100) NULL ,
`acc_type` tinyint NULL ,
`extral_field_a` varchar(300) NULL ,
`extral_field_b` varchar(300) NULL ,
`extral_field_c` varchar(300) NULL ,
`extral_field_d` varchar(300) NULL ,
PRIMARY KEY (`member_id`)
)
使用 逆向工程生成对应的实体类、mapper
使用工程注意事项:
- 修改mbg.xml中的 23行,也就是所要生成的数据库实体类所对应的数据库的URL地址
- 再修改64行的 tableName 表名 及对应的 domainObjectName 实体类Bean的名称
- 如果不止生成一个实体类,只需要复制
列并修改对应的参数即可。
- 执行生成逆向工程数据:
- 启动com.webcode.main中的Runner.java中的main方法即可
逆向工程工具包百度云链接地址:
链接:https://pan.baidu.com/s/1XkGJ7WVNgtZ6xdnRaMpnQA
提取码:4tch
将生成的BEAN和Mapper.java、Mapper.xml添加到项目中,具体位置如下图:
五、Service 及其实现类 ServiceImpl 及Controller层的创建
根据 项目基础设定创建 Service 、 ServiceImpl对应的包名,并创建UserService 、 UserServiceImpl 类
UserService 中创建 CURD 基本的单表操作,在UserServiceImpl中实现UserServcie接口的方法,并调用UserMapper的实例bean注入进来,对CURD 调用对应的Mapper层CURD操作。
注意: 为了便于排错 , 在 UserService中的CURD方法名要与Mapper中的区别开来 :
示例:
- UserService : get 、save 、 update、 remove
- UserMapper : select 、 insert 、update 、 delete
根据项目基础设定创建 Controller层,并创建 UserController.java ,并调用 UserService 业务功能
六 、加入SpringCloud环境
1. sp-parent
UTF-8 1.8 1.8 4.12 1.2.17 org.springframework.cloud spring-cloud-dependencies Dalston.SR1 pom import org.springframework.boot spring-boot-dependencies 1.5.9.RELEASE pom import mysql mysql-connector-java 5.0.4 com.alibaba druid 1.0.31 org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.0 ch.qos.logback logback-core 1.2.3 junit junit ${junit.version} test log4j log4j ${log4j.version} 2. sp-portal-provider工程
mysql mysql-connector-java com.alibaba druid ch.qos.logback logback-core org.mybatis.spring.boot mybatis-spring-boot-starter org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.cloud spring-cloud-starter-eureka org.springframework.cloud spring-cloud-starter-config org.slf4j slf4j-log4j12 test com.webcode.sp.springcloud sp-feign-api 0.0.1-SNAPSHOT 将provider 中的parent 版本修改为父工程的 sp-parent 版本,并添加对其他模块 的依赖
com.webcode.sp.springcloud sp-parent 1.0-SNAPSHOT
org.springframework.cloud spring-cloud-starter-config org.mybatis mybatis-spring 1.2.2 org.mybatis mybatis-spring 1.2.2 七 、主启动类与实务配置
1. 创建 主启动类 :
@SpringBootApplication @EnableEurekaClient @MapperScan("com.webcode.sp.mapper") @EnableTransactionManagement public class PortalProviderMainType { public static void main(String[] args) { SpringApplication.run(PortalProviderMainType.class, args); } }
2 . 为项目配置事务管理
在主启动类添加 @EnableTransactionManagement 注解,以引入SpringBoot的事务
在 UserServiceImpl 的方法上添加 @Transactional(readOnly = true) 注解,将当前实现类加入到事务中管理
在 需要进行事务管理的 方法 前添加 @Transactional(readOnly=false,rollbackFor=Exception.class,propagation=Propagation.REQUIRES_NEW)
注解,当前注解为: readOnly = false 等于 “不仅仅是只读,可写”
rollbackFor=Exception.class 是对异常情况进行回滚,propagation=Propagation.REQUIRES_NEW 是指事务的传播特性,当前给定的传播特性为:每一个当前的方法被其他包的类调用时,或者被本类中的其他方法调用时,都会开启一个新的事务。
3 . Controller类
@Controller public class UserController { @Autowired private UserService userService; @RequestMapping("/portal/provider/user/{id}") public ResultEntity
getUserById(@PathVariable("id") Integer id ){ User user = userService.getById(id); return new ResultEntity (ResultEntity.SUCCES,ResultEntity.NO_MSG,user); } }
- 创建ResultEntity工具类,将Controller层方法,进行统一异常处理,如没有异常,成功的请求根据情况对后台数据进行封装,并返回给前端页面。
- 为了减少代码量,为当前项目添加 lombok 来优雅编码
- Lombok 插件安装:
https://blog.csdn.net/weixin_42405670/article/details/89278881
ResultEntity 效果:
@Data public class ResultEntity
{ public static final String SUCCES= "SUCCESS"; //成功回调函数 public static final String FAILED= "FAILED"; //失败回调函数 public static final String NO_MSG= "NO_MSG"; //默认成功,没有异常 public static final String NO_DATA= "NO_DATA"; //没有数据返回 //响应结果: 可选值只有SUCCESS和FAILED private String result; //在响应结果为FAILED 是的提示消息 private String message = NO_MSG; //在响应结果为SUCCESS时返回的数据 private T data; public ResultEntity(String result, String message, T data) { super(); this.result = result; this.message = message; this.data = data; } } 4. yml配置文件
server: port: 10001 #配置当前服务的端口号 spring: application: name: PortalProvider # 配置的是这个微服务的名字,将来在注册中心中显示的和消费端引用的都是这个名字。 datasource: # 配置数据源 name: druid-source #配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。 如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this) type: com.alibaba.druid.pool.DruidDataSource # 配置的数据源类型,这里是阿里的数据源 driver-class-name: org.gjt.mm.mysql.Driver #根据url自动识别,这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName(建议配置下) url: jdbc:mysql://127.0.0.1:3306/springdemo?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8 #连接数据库的url,不同数据库不一样。 username: root #连接数据库的用户名 password: root #连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。详细看这里:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter dbcp: min-idle: 5 #最小连接池数量 initial-size: 5 #初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 max-total: 5 # 最大连接池数量 max-wait-millis: 200 # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。 mybatis: mapper-locations: - classpath:mappers/*Mapper.xml #配置扫描的 *Mapper.xml文件地址 eureka: client: service-url: defaultZone: http://localhost:10000/eureka # 指定客户端访问Eureka服务端的URL地址 #DRUID连接池的使用 配置详情 : https://www.cnblogs.com/wuyun-blog/p/5679073.html
八 、 注册中心 sp - eureka-reg-center 配置
1. 依赖添加:
org.springframework.cloud spring-cloud-starter-eureka-server 将provider 中的parent 版本修改为父工程的 sp-parent 版本,并添加热部署
com.webcode.sp.springcloud sp-parent 1.0-SNAPSHOT
org.springframework springloaded org.springframework.boot spring-boot-devtools
2. 主启动类创建
@SpringBootApplication @EnableEurekaServer //把当前微服务标记为Eureka注册中心,接受其他微服务的注册 public class EurekaRegCentMainType { public static void main(String[] args) { SpringApplication.run(EurekaRegCentMainType.class, args); } }
3.yml 配置文件
server: port: 10000 eureka: instance: hostname: localhost #eureka服务端的实例名称 client: register-with-eureka: false #false表示不向注册中心注册自己。 fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务 service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka #指定客户端访问Eureka服务端的URL地址
九 、 静态资源
1. 存放目录
2. 路径问题
static目录下的文件,部署到服务器上后会放在Web应用的根目录下,所以页面上路径根据是否配置了server.context-path,有两种情况:
- 配置了server.context-path
/contextPath/xxx/xxx
- 没有配置server.context-path
/xxx/xxx
十 、 Maven的依赖原则
当根据依赖的传递性会在同一个工程中引入同一个jar包的不同版本时,Maven参照下面两个原则:
①路径最短者优先
②路径相同时,先声明者优先
解决jar包冲突的另外一个办法
org.activiti activiti-spring-boot-starter-basic 5.21.0 org.mybatis mybatis
你可能感兴趣的:(分布式,分布式项目,SpringBoot)