首先springboot最亮眼的特点就是简单,其次也是入门级的微服务,同时springBoot提供了一整套的微服务。
但是还有一些问题:
这些划红线的包,还没有下下来,但是不影响使用。
配置有两种方法,其一,使用spplication.properties:
其二就是使用application.yml这种方式:
这是一种语法格式,注意:号后面要有空格。
配置中有一个比较秀的操作,就是配置对象:
first:
A: 12
B: 22
C: 33
minMoney: 1
description: 最少${first.minMoney}块
在yml配置文件中写上。 在类里面新建一个对象,名字随便取
@Component
@ConfigurationProperties(prefix = "first")
public class FirstConfig {
private Integer A;
private Integer B;
private Integer C;
private BigDecimal minMoney;
public BigDecimal getMinMoney() {
return minMoney;
}
public void setMinMoney(BigDecimal minMoney) {
this.minMoney = minMoney;
}
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
private String Description;
public Integer getA() {
return A;
}
public void setA(Integer a) {
A = a;
}
public Integer getB() {
return B;
}
public void setB(Integer b) {
B = b;
}
public Integer getC() {
return C;
}
public void setC(Integer c) {
C = c;
}
}
注意要加上@component和@configurepropertis,如果需要在controller里面运行,只需要调用自动装配即可。
在Mac控制台启动了很多次数据库发现都不行,查了一下命令也没错呀,结果发现是因为没有启用MySQL数据库,尴尬了。使用mysql -u root -p启动数据库,接着就是再application.yml里面进行配置了。
如果想要创建一个表,不需要在控制台打开MySQL写SQL语句,只需要创建一个类即可。
@Entity
public class Luckymoney {
@Id
@GeneratedValue
private Integer id;
private BigDecimal money;
/**
* 发送,接收方
*/
private String producer;
private String comsumer;
public Luckymoney() {
}
}
这个时候再启动控制台:
log日志显示
可以看到表里面已经有属性了
如果再重新启动一遍,他会把原来表里面的大小删了再重新写一遍,这是因为在原来ddl-auto里面设置了create,把它改成update就好了。
接着就是进行简单的jpa操作,非常简洁:
public interface LuckymoneyRepository extends JpaRepository<Luckymoney, Integer> {
}
jpa定义了一个标准,而hibernate实现了他,所以只需要调用这个接口就好了。
@RestController
public class LuckymoneyController {
@Autowired
private LuckymoneyRepository luckymoneyRepository;
@GetMapping("/luckymoneys")
public List<Luckymoney> list() {
System.out.println(luckymoneyRepository.findAll().get(0));
return luckymoneyRepository.findAll();
}
}
使用postman测试:
太久没有编码了,出现了很多意外,比如忘记在entity实体类里面加上getset方法,导致查出来装不进去,查出来是空。 在实现基本操作的时候注意数据库能不能支持事务。事务这个东西是指数据库的事务,不是指Java里面的事务,所以关键还是要看看数据库有没有支持事务操作。MySQL比较特殊,他可以支持,也可以不支持,这个时候就要看看用的engine,如果使用myisam这种引擎,他是不能支持事务的,就算加上Transactional这个注解也没有用,而需要改成innoDB。使用show variables like "%storage_engine%"查看当前引擎,ALTER TABLE luckymoney ENGINE=InnoDB;修改引擎即可。
首先是aop,aop这种东西是一种编程规范,在之前学习ssm的时候就知道,但没有深入学习,只是知道这个东西是面向切面编程而已。aop其实换一个角度看问题而已,将通用的逻辑从业务逻辑中划分出来。用日志加以说明: 对于一个请求,他的生命周期是这样的: 收到HttpRequest请求 | 记录请求 | 处理网络请求 | 生成HttpResponse | 记录回复
对于数据库也是一样的: 收到数据库的请求 | 记录请求 | crud | 生成处理结果 | 记录回复 原来我们都是上到下看,现在切面看,我们发现第一第二步,第三第四步可以做为业务处理,最后一步可以作为log处理,这个时候就按照切面分了。
注意还要在pom里面导入aop包。
首先要创建一个日志记录的类,HttpAspect,用来记录请求。使用LoggerFactory创建一个logger,注意是创建属于slf4j的那个。
private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
创建一个拦截方法:
@Pointcut("execution(public * com.greenarrow.luckymoney.controller.LuckymoneyController.*(..))")
public void log() {
}
创建这个拦截方法是为了方便,免得代码冗余。 在拦截前后:
@Before("log()")
public void doBefore(JoinPoint joinPoint) {//在输出前这个log要干什么
@After("log()")
public void doAfter() {//输出后这个log要干什么
如果不用Pointcut,在每一个before after之后都要写上execution。 有时候还想要其打印出具体内容,可以调用一个afterreturning方法:
@AfterReturning(returning = "object", pointcut = "log()")
public void doAfterReturning(Object object){
logger.info("response={}", object);
}
测试也是比较简单的,主要就是controller测试的区别,普通的service测试直接加上两个注解RunWith SpringRunner即可,controller有所区别,controller是需要外部请求的,所以需要一个MockMvc驱动:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
class LuckymoneyControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void list() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/luckymoneys")).andExpect(MockMvcResultMatchers.status().isOk());
}
MockMvc代替执行HttpRequest.
guns是一个能够快速构建后台管理系统的开源软件,guns框架更注重的是后台管理系统。 guns首先是使用maven管理,这里使用的还是v3.0版本,如果是更高的版本可能有所不同:
guns-parent就是guns的maven父工程,所以parent是一个父工程,然后就是guns-core就是核心包,比如字符串处理,日志处理等等都在这里。guns-generator的代码生成,guns-admin就是guns的基础业务 ,guns-rest就是guns的rest支持。 加载还是出现了不少问题。这里使用的是gunsV3.0版本,按照网上的步骤,加载有两种方式,一种是直接用idea打开guns文件夹,一种是打开guns-parents文件夹,但是好像第一种有问题,关键是idea不知道是抽风了还是怎么的,没有识别出这个guns项目是maven项目,导致要自己添加maven配置,添加的时候不知道选择哪个pom文件,其实应该选择guns-parents的pom.xml文件的,但是之前不知道。这里采用第二种打开,直接选择guns-parents,guns-parents是父工程,你把他导入进去了,那么他也会把其他的三个工程导入进来,接着就是要更该sql配置了,首先把sql里面的SQL语句在自己的MySQL上面运行,然后把application.yml里面的密码改了,这里采用MySQL5.7.28,因为gunsV3.0就支持5.7,然后启动运行即可。出现GunApplication is success就成功了。使用localhost访问: