前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot简介

SpringBoot简介

作者头像
西红柿炒鸡蛋
发布2020-01-15 16:06:07
5970
发布2020-01-15 16:06:07
举报
文章被收录于专栏:自学笔记自学笔记

springBoot与springMVC的特点

首先springboot最亮眼的特点就是简单,其次也是入门级的微服务,同时springBoot提供了一整套的微服务。

  • 1.使用的是idea作为编译器,在配置启动springboot的过程中遇到了写问题,提示springframework.boot.test.comtext不存在,找了很久,其实是因为包没下完。可能在下载的过程中出现了网络不顺畅,导致下来一个空文件夹,然后maven检查了一下发现存在文件夹了,就没有检查里面到底东西齐了没有。所以,解决方法就是打开.m2的仓库,将里面springframework的东西全部删掉,然后让他重新下载。
  • 2.第二个问题的原因还未知,出现了# 报错No active profile set, falling back to default profiles,按照网上的解决方法,都是加上一个spring-boot-starter-web的注解即可,但是我这个不可以,尝试着点击maven里面clean,再重新install,居然好了。

但是还有一些问题:

这些划红线的包,还没有下下来,但是不影响使用。

配置文件

配置有两种方法,其一,使用spplication.properties:

其二就是使用application.yml这种方式:

这是一种语法格式,注意:号后面要有空格。

配置中有一个比较秀的操作,就是配置对象:

代码语言:javascript
复制
first:
  A: 12
  B: 22
  C: 33
  minMoney: 1
  description: 最少${first.minMoney}块

在yml配置文件中写上。 在类里面新建一个对象,名字随便取

代码语言:javascript
复制
@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语句,只需要创建一个类即可。

代码语言:javascript
复制
@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操作,非常简洁:

代码语言:javascript
复制
public interface LuckymoneyRepository extends JpaRepository<Luckymoney, Integer> {

}

jpa定义了一个标准,而hibernate实现了他,所以只需要调用这个接口就好了。

代码语言:javascript
复制
@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;修改引擎即可。


接下来就是相关与WEB了

首先是aop,aop这种东西是一种编程规范,在之前学习ssm的时候就知道,但没有深入学习,只是知道这个东西是面向切面编程而已。aop其实换一个角度看问题而已,将通用的逻辑从业务逻辑中划分出来。用日志加以说明: 对于一个请求,他的生命周期是这样的: 收到HttpRequest请求 | 记录请求 | 处理网络请求 | 生成HttpResponse | 记录回复

对于数据库也是一样的: 收到数据库的请求 | 记录请求 | crud | 生成处理结果 | 记录回复 原来我们都是上到下看,现在切面看,我们发现第一第二步,第三第四步可以做为业务处理,最后一步可以作为log处理,这个时候就按照切面分了。

注意还要在pom里面导入aop包。

首先要创建一个日志记录的类,HttpAspect,用来记录请求。使用LoggerFactory创建一个logger,注意是创建属于slf4j的那个。

代码语言:javascript
复制
    private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);

创建一个拦截方法:

代码语言:javascript
复制
    @Pointcut("execution(public * com.greenarrow.luckymoney.controller.LuckymoneyController.*(..))")
    public void log() {
    }

创建这个拦截方法是为了方便,免得代码冗余。 在拦截前后:

代码语言:javascript
复制
    @Before("log()")
    public void doBefore(JoinPoint joinPoint) {//在输出前这个log要干什么
    @After("log()")
    public void doAfter() {//输出后这个log要干什么

如果不用Pointcut,在每一个before after之后都要写上execution。 有时候还想要其打印出具体内容,可以调用一个afterreturning方法:

代码语言:javascript
复制
    @AfterReturning(returning = "object", pointcut = "log()")
    public void doAfterReturning(Object object){
        logger.info("response={}", object);
    }

测试

测试也是比较简单的,主要就是controller测试的区别,普通的service测试直接加上两个注解RunWith SpringRunner即可,controller有所区别,controller是需要外部请求的,所以需要一个MockMvc驱动:

代码语言:javascript
复制
@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框架更注重的是后台管理系统。 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访问:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • springBoot与springMVC的特点
  • 配置文件
  • 持久化配置
  • 接下来就是相关与WEB了
  • 测试
  • Guns框架
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档