十分钟带你掌握springboot微服务架构的基本使用

        前言: 上次写了一篇关于搭建SSM工程的文章,说实话,我都感觉写得好水。整篇文章一眼下来就让人感觉很复杂,看起来步骤繁琐,配置繁多,特别是各种xml的配置,让人一看就觉得不好玩。这也违背了我们程序开发的原则。你说如果你接手一个大型项目,光看配置都要花好久时间,那还玩毛。所以呢,微服务的出现还是很有道理的。因为每一个大型项目都可以拆分成小的项目,每个小的项目只负责各自单一的功能,每个项目可以使用不同的技术,连接不同的数据库,部署到不同的服务器,项目之间通过restful接口互相访问即可。自从用上了微服务架构,感觉程序开发真的是越来越简便了。厉害厉害。说了一分钟废话了,下面用九分钟说一下springboot的基本使用。

一,生成springboot项目并提供接口

1.1 访问start.spring.io 输入包名项目名,添加基本依赖web (选Full stack web...) 生成工程。

1.2 导入工程将下载后的项目解压,使用idea/eclipse的导入 import -> exist maven project. IEDA下是自带maven插件的,eclipse的话得自己配置一下。自己配置的方法也很简单,此处不做介绍。

1.3 编写接口。建包controller,写TestRestController类

1.4启动项目

运行主类:项目名+Application的main方法。

前台输入:localhost:8080/test即可显示:call success!

        总结:没错,第一个springboot的demo就这么完成了。是不是很6很简单很暴力。分分钟我们就开发了一个项目,提供了一个接口。别人也可以通过访问这个接口获取到我们提供的数据了。比起之前的springmvc项目开始前的还需要配置各种xml的是不是爽多了。

 

二,springboot访问html页面

2.1 springboot推荐前台使用tymeleaf模板。pom.xml文件中引入thymeleaf依赖:

(ps通过: mvnrepository.com | earch.maven.org 可以找到所需依赖的dependency)

<!-- thymeleaf 模板相关 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
 

2.2 在自带的application.properties中对thymeleaf进行配置。

### server config
server.ip=192.168.0.77
server.port=8080
server.servlet.context-path: /sbDemo
​
### themeleaf
spring.thymeleaf.prefix=classpath:/templates/pages/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
spring.thymeleaf.cache=false

2.3 后台与html交互

    2.3.1建controller类,在Controller写前往html的接口,并提供数据

    2.3.2 写前台hello.html,接收并显示数据。thymeaf的用法跟jsp差不多。能完成所有jsp能完成的事。

    2.3.3访问接口后前台显示:访问路径为 192.168.0.77:8080/sbDemo/hello

    注:路径前面对应你的配置文件application.properties中server的ip,port,context-path.

    补充:html中需要引用css与js文件时,如果css和js不是直接在static下,而是在static下的文件夹中。在后台需要配置对静态资源的引用,否则访问不到资源文件。添加配置后,html中就可以用@{...}来引用static下的js/css/img等资源。当然,如果你只提供接口提供数据不涉及页面的话就不需要这些了。

前台引用如图:

 

三,springboot访问数据库

3.1 pom.xml中引入相关数据库如mysql驱动依赖和mybatis依赖:

<!-- mysql 数据库相关 -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<!-- mybatis 依赖相关 -->
<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>1.1.1</version>
</dependency>

引入数据库依赖后,在application.properties中配置数据库连接

3.2 编写Dao层从数据库获取数据,并测试

建库后,插入表数据sql:

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(40) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
​
-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('1', '东邪', '41');
INSERT INTO `users` VALUES ('2', '吸毒', '42');
 

建立dao层获取表数据,类中引用Mapper注解即可。(当然,也可以选择用mapper.xml文件的形式,此处不介绍。)

测试类测试能不能获取到数据,用自带的src/test/java即可:

测试成功结果如下。这时候就可以写controller、service、dao层的调用关系了。此时,前台的数据就可以显示为从数据库获取的数据了。

        总结:至此,建立springboot工程,连接数据库,编写dao层,service层,controller层,提供接口,提供页面的功能就完成了。都没花什么时间,作为程序猿,除了引入一些必要jar包和简单的配置一下之外,我们什么都不用做了。只需要集中精力于我们的业务逻辑就行。整个过程没花多少时间,感觉还是很不错的。

---------------------------------------------------------------分割线---------------------------------------------------------------------------

分割线后面的内容是一些扩展的内容,有需要的话再看一些。不然只看前面三步就行了。

四,springboot自定义异常处理

4.1 springboot默认的异常处理是/error接口。可以通过实现ErrorController来重新定义对错误信息的处理。

提供两种返回错误。一种是页面返回、当你是页面请求的时候就会返回到我们指定的页面 error.html

另外一种是json请求的时候就会返回json错误

 

五,springboot自定义定时任务

同样可以使用spring框架中的@Scheduled创建定时任务,在定时任务类中加入conponent注解让spring找到,然后在需要定时执行的方法上加上@Scheduled就行。

但是springboot中需要在主类中加入@EnableScheduling注解,表示启用定时任务的配置

六,springboot自定义切面

与spring中切面的使用一致。都是先定义自己的注解,然后定义自己的切面。使用时在相应位置加上自己的注解即可。

6.1 定义自己的注解并使用

6.2 定义自己的切面

其中获取注解中的信息的方法如下:

6.3 前台发送请求,后台接收后执行我们的切面。

结果就是在调用接口执行testAsp()方法前,被我们定义的MyAspect先拦截了一波,执行了相应的操作,成功地使用了我们的自定义切面。

常见的切面使用有 log日志记录、事务处理、访问拦截等以实现某些功能。

七,springboot导出jar/war包

7.1 导出jar包

由于生成的pom.xml文件中默认指定生成的是jar,

<packing>jar<packing>

所以在pom.xml文件所在的目录下,打开命令窗口,运行如下命令打包即可。(表示不需要测试类的打包)

mvn clean package -Dmaven.test.skip=true
如图,打包成功Build SUCCESS后

  jar包会生成到target目录中

移动jar包至任意位置运行,在jar所在位置使用java -jar [jar包名] 即可使用jar包启动项目。效果与在IDE中运行一致。

7.2 导出war包

如果是想部署到外置的tomcat容器中,那就需要导出war包。

    7.21 此时在pom.xml中将打包类型改为war.

<packing>war<packing>
此时可能pom文件会报web.xml文件缺失的错误。加上以下语句即可。
<failOnMissWebXml>false</failOnMissWebXml>
 

    7.22 打包类型改成war包后,此时需要移除springboot的内置tomcat依赖。并添加servlet所需的依赖。

    7.23 因为打war包后就不会运行main方法了,入口改为了SpringBootServletInitializer。所以我们需要在我们的主类Application.java同级的目录下,新建一个类继承SpringBootServletInitializer,并在类中指向我们需要运行的主类Application对象。这样war包就有入口了。

    7.24 此时,就可以打war包了。还是运行打包的命令:

mvn clean package -Dmaven.test.skip=true

7.25 此时在target目录中得到的就是war包了,将war包移到tomcat的webApp目录下,然后在conf目录下运行startup.bat启动tomcat,就能启动项目了。前台访问地址= ip+端口+war包名+接口地址。

PS:自动生成的war包或者jar包名都会带有一串数字和英文,可以通过finalName来控制生成的名字。

八,springboot上传文件

springboot的文件上传就是spring的文件上传。

前台:

<form enctype="multipart/form-data" method="post" action="/sbDemo/uploadImg">
    图片<input type="file" name="file"/> <input type="submit" value="上传"/>
</form>
 

后台Controller中:

/**
      * 处理文件上传
    */
    @RequestMapping(value="/uploadImg", method = RequestMethod.POST)
    @ResponseBody
    public String uploadImg(@RequestParam("file") MultipartFile file,
            HttpServletRequest request) {
        String msg = "SUCCESS";
        String fileName = file.getOriginalFilename();
        String filePath = "C:\\Users\\Administrator\\Desktop\\test\\upload\\img\\";
        System.err.println("上传路径:"+filePath);
        try {
            uploadFile(file.getBytes(), filePath, fileName);
        } catch (Exception e) {
            msg = e.getMessage();
        }
        //返回json
        return msg;
    }
​
    /**
     * @Description : 上传文件
     * @param file : 文件实体
     * @param filePath : 文件目标路径
     * @param fileName : 文件名
     * @throws Exception
     */
    public static void uploadFile(byte[] file, String filePath, String fileName) throws Exception { 
        File targetFile = new File(filePath);  
        if(!targetFile.exists()){    
            targetFile.mkdirs();    
        }       
        FileOutputStream out = new FileOutputStream(filePath+fileName);
        out.write(file);
        out.flush();
        out.close();
    }
    #PS:另外可以在配置文件中设置上传文件的参数
spring.http.multipart.maxFileSize=100Mb
spring.http.multipart.maxRequestSize=100Mb

九,springboot其它

待补充。。

猜你喜欢

转载自blog.csdn.net/HelloWorld_In_Java/article/details/81519267