# springboot2.0demo
**Repository Path**: meetu/springboot2.0demo
## Basic Information
- **Project Name**: springboot2.0demo
- **Description**: springboot 2.0 demo project
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2018-05-06
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# springboot2.0demo readme
> springboot2.0 demo program
## 1.运行及打包
1. 本地调试直接运行DemoApp.java 由于spring-dev-tools的作用.修改文件会自动重启,便于调试,
1. 使用了maven profile
1. 运行
- mvn exec:java -Dexec.mainClass=com.example.demo.DemoApp (-Plocal/qa/prod)
- mvn spring-boot:run (-Plocal/qa/prod)
1. 打(jar/war)包
- mvn package (-Plocal/qa/prod)
- 在pom文件顶部jarwar切换打包模式
1. 集成swagger2 [api doc](http://localhost:8080/swagger-ui.html)
## 2.技术应用(见pom.xml)
- springboot2.0
- mybatis
- redis此处只作为数据库缓存,方便切换为其他缓存工具如ehcache...
- atomikos / xaDataSource 多数据源事务
- quartz 未深度集成
- jms(activemq)
- log4j2
- springboot-actuator
- swagger2
## 3. 0723会议讨论的项目分层及各层说明如下:
1. table
-- 数据库中的表
2. entity
-- 和数据库中的表一一对应,严格匹配
3. mapper
-- entity的增删改查
-- 包括mapper.xml
4. wrapper 取消
-- 相比于mapper的单表操作,wrapper是多表操作,这些代码移到bean中
5. bean
-- 业务对象,包含数据及行为。持有多个entity,多个mapper
-- bean 提供 initialize() / initialize(id),save 方法
6. service
-- 跨bean的业务,接受controler输入,组织bean处理输入,返回处理结果给controller
7. controller
-- 对外提供服务
也许我的理解有偏差,如有不对,请补充,谢谢!
## 4. 开发demo中遇到的问题
> 我以AMP中Story,StoryContent,StoryToGeography为场景,周三会议讨论的程序结构为参考做了一个小demo
1. 如果想像类似Hibernat级联那样操作一个bean的更新,实现起来比较麻烦,实现代码参考StoryBean.updateFullStoryBean()
1. bean的行为定义在bean类中,一定会涉及数据库操作,那么因为@Transactional加在service上,所以依然需要从service作为入口调用bean的行为
- 导致的问题是:在service中会一直使用new StoryBean().xx()方法,不舒服
1. Bean会集成有关系的Entity,组合数据结构.随时会获取,创建,修改,销毁bean.所以bean不应该被spring管理
- 导致的问题是: 需要显式的在bean中用application获取其他wrapper
1. 需要添加wrapper层
- wrapper负责注入多个mapper,并在wrapper层添加缓存实现,然后将wrapper作为CRUD统一实现在bean中以ApplicationContext.getBean()的形式获取
- 我觉得wrapper在必要时也可以注入到service中