很久没有在慕课上写手记了,各位慕友们请见谅,因为之前一段时间找工作,又开辟了新的个人博客 技术笔记 ,这边的就放一边了,见谅,见谅。
慕小白又回来了。
今天向大家介绍的是spring-boot,这个java框架在RESTful思想的背景下,也火了一把,而且还可能火下去。因此就研究了一下怎么搞。
1. 先简介一下各种工具框架的作用实际上过程很简单。关键在于理解概念,以及在哪种情况下,使用哪种工具。如果这个可以在头脑中有一个清晰的逻辑概念,那就一切OK。
首先是Gradle,实际上这个工具在我的其他手记中已经有说道,就是一个自动化建构工具,为了解决依赖问题,同时构建项目和打包部署项目。这样就能拨开面纱,看她的脸了。Maven主要因为xml的繁琐,会被抛弃。但是现在的大多数项目还在使用Maven,因为路径依赖的问题,还是会存在一段时间的。(个人看法)
然后是spring-boot 这个框架,这个框架就需要我们打破web传统,可以没有web.xml,也可以不用装tomcat,所有的内容都在一个jar中就可以完成。只需运行java -jar xxx
就可以完成了。但是不知道效率、性能怎么样? 不过就简单性,是OK的。而且一切又回归到main了,这不也是所有语言的开始吗?
至于,在spring-boot中结合jersey实现RESTful,也只用理解jersey只是一种实现而已,然后在spring-boot中注册一下,就可以了,不过具体细节还有很多,这个要在下一篇具体介绍。
2. 安装,创建项目首先安利一个网站 start spring-boot,可以在网站上直接定制需要的技术,像AOP,JDBC,MYSQL,AMQP等都可以直接生成。其他步骤如下,首先安装好gradle,注意:配置好环境变量。切换到项目目录后,直接gradle init
即可,然后就是一些约定俗成的文件夹格式。可以自己手动创建好就行了。
3.1 编码打包的时候,和jvm的编码
编译的时候在build.gradle 最后面添加一下代码,表示,在complile的时候采用UTF-8编码。
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
使用jvisualvm图形化工具查看spring-boot概况
修改gradle.bat 中的set DEFAULT_JVM_OPTS=
默认为空 修改为set DEFAULT_JVM_OPTS="-Dfile.encoding=UTF-8"
可以在上图中看到JVM参数一栏中这个参数GBK,然后直接修改。
3.2 热部署
spring-boot-devtools 可以参考一下这篇文章:springboot + devtools(热部署)
reload和restart的区别
restart:先stop 再start,服务会停止。如果重启了肯定就会reload的。
reload是只是重新加载文件,但是服务不停。重新加载,就像网页F5一样。
这些细微的区别才是关键。
3.3 debug
怎么实现debug运行
gradle bootRun --debug-jvm
在ide中的话直接右键单击debug运行java Application是不是异常的简单啊。
4. 重要文件分析build.gradle
buildscript {
ext {
springBootVersion = '1.5.1.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
jar {
baseName = 'spring-boot'
version = '0.0.1-SNAPSHOT'
}
repositories {
jcenter()
}
dependencies {
compile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '1.5.1.RELEASE'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.5.1.RELEASE'
compile group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '1.5.1.RELEASE'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-jersey', version: '1.5.1.RELEASE'
testImplementation 'junit:junit:4.12'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
这个文件里面包含3块 构建脚本, 包依赖,编译打包。
Application.java 启动
package web;
import org.glassfish.jersey.servlet.ServletContainer;
import org.glassfish.jersey.servlet.ServletProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import config.DatabaseProperties;
import config.JerseyConfig;
import config.RedisProperties;
@SpringBootApplication
public class Application {
@Bean
public ServletRegistrationBean jerseyServlet() {
ServletRegistrationBean registration =
new ServletRegistrationBean(new ServletContainer(), "/rest/*");
registration.addInitParameter(
ServletProperties.JAXRS_APPLICATION_CLASS, JerseyConfig.class.getName());
return registration;
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
中间的一串@Bean在这里可以无视,是注册jersey用的,后面再说。spring-boot在运行的时候会扫描有main方法的类,这里就是Application类,然后运行main方法,这里SpringApplication
Hello.java 访问
package web;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.*;
import config.RedisProperties;
@RestController
public class Hello {
@RequestMapping("/")
public String hello() {
return "hello world";
}
}
直接访问http://localhost:8080/ 页面返回 hello world,解释:@RestController注解是表明这个类是控制器,@RequestMapping 就是前台的访问路径
4. 对问题的理解配置的臃肿,之前的web应用经过一层一层的xml跳转,搞得头晕,当初把所有的注入实体,都抽出来到xml中,现在看来是不是有一点过了?可以贴一张图片给大家看一下。
这个还没有贴完。一个项目中的一小部分。这么多的配置文件,而且大多数还是很有规律的一个模块一个配置文件,这样,为什么不用约定优预配置这种理念呢?spring-boot就是这样子的,只有像数据库账户密码等信息是一定要提出来的,其他的程序有关类的实例化,直接通过注解,包扫描就行了。
回归简约:简单极美
源码地址:github源码 持续更新ing
参考文献编码问题 & spring-boot常用的配置1 spring-boot常用配置2 感谢网友
以上文字,观点只是个人观点,和慕课网无关。个人实力有限,如果发现错误,一定要指出,谢谢各位慕友们。如有转载,请注明出处。
热门评论
马克