1.本地Maven部署
1.1 下载3.8.4地址
https://maven.apache.org/download.cgi
1.2 解压Maven核心程序
1.3 配置文件
修改配置文件conf/settings.xml
#1.指定本地仓库 记住:
#一定要把 localRepository 标签从注释中拿出来。
#注意:本地仓库本身也需要使用一个非中文、没有空格的目录
<localRepository>D:\maven-repository</localRepository>
#2.阿里云提供的镜像仓库,将原有的例子配置注释掉
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>
#3.配置 Maven 工程的基础 JDK 版本
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
1.4 配置Java环境变量
1.5 配置MAVEN_HOME
1) MAVEN_HOME通常指向的是 bin 目录的上一级
2) PATH 指向的是 bin 目录
3) 验证
C:\Users\Administrator>mvn -v
Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)
Maven home: D:\software\apache-maven-3.8.4
Java version: 1.8.0_141, vendor: Oracle Corporation, runtime: D:\software\Java\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
2.SpringBoot2
2.1 Idea配置本地Maven
2.2 配置Settings
2.3 File Encodings
2.4 打包信息
否则提示jar中没有主清单属性
<!-- 打包格式 -->
<packaging>jar</packaging>
<!-- 打包插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.12.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
2.5 Lombok
1) 安装插件lombok
2) 添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
3) 代码
@Data
public class User {
private String userName;
}
4) 构造器
@AllArgsConstructor
@NoArgsConstructor
2.6 devtools
<!--热启动,就是不重启服务前提下刷新页面-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
2.7 阿里云源
查询版本
https://mvnrepository.com/
https://central.sonatype.com/?smo=true
2.8 jar中没有主清单属性
pom中添加
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.12.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
2.9 虚拟机网卡导致IP不可调用
1) 忽略掉
spring:
cloud:
inetutils:
# 可用正则表达式,表示禁用以VMware开头的网络
ignoredInterfaces: ['VMware.*']
显示的地址依旧可能是虚拟网卡的地址,但我试没问题,
2)最稳妥是指定ip
spring:
cloud:
inetutils:
preferred-networks: 192.168.2.18 #可以是IP段:192.168.20
3)所有
spring.cloud.inetutils.default-hostname
spring.cloud.inetutils.default-ip-address
spring.cloud.inetutils.ignored-interfaces
spring.cloud.inetutils.preferred-networks
spring.cloud.inetutils.timeout-seconds
spring.cloud.inetutils.use-only-site-local-interfaces
2.10 YML文件不识别
Project Structure -> Modules -> Spring -> +
2.11 如何查看历史版本帮助文档
1) 打开Spring官网
spring.io
2) 选择菜单栏中Projects下拉菜单中的Spring Framework
3) 将OVERVIEW页面切换为LEARN页面
4)点击任意一个版本后面的 Reference Doc.链接,选择的是current版本
5)将上URL修改为https://docs.spring.io/spring-framework/docs/并访问,即每个版本所对应的帮助文档目录
6) 点击任意一个版本,选择reference目录,可以看到html和pdf两种查看方式供选择
3.如何将配置文件挂到ja包外面
3.1 java -jar 命令行中
通过 --spring.config.location 参数指定的方式优先级最高
3.2 设置 SPRING_CONFIG_LOCATION
环境变量来指定配置文件的路径是次优先级
3.3 在执行 java -jar 命令同级目录下的 config 文件夹是第三优先级
1)注意:如果 java -jar 命令不是在项目 jar 包 同级目录执行的话,在项目 jar 包同级目录下的 config 文件夹是不生效的
2) 在应用程序(jar包)启动命令执行目录下 创建一个名为 config 的文件夹,然后将配置文件放在该文件夹中
3) 在代码的配置文件 application.properties 或 application.yml 中添加以下行
spring:
config:
location: classpath:/,file:./config/
3.4 项目 jar 包同级下直接放 properties 文件是第四优先级,直接把配置文件放到 jar 包的同级目录
4.跨域
<!--fastjson2-->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.21</version>
</dependency><dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension</artifactId>
<version>2.0.21</version>
</dependency>
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
WebMvcConfigurer.super.configureMessageConverters(converters);
}
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//Json 格式化,时间格式化
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
// 添加支持的媒体类型
List<MediaType> supportedMediaTypes = new ArrayList<>();
supportedMediaTypes.add(MediaType.APPLICATION_JSON);
supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
supportedMediaTypes.add(MediaType.APPLICATION_PDF);
supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
supportedMediaTypes.add(MediaType.APPLICATION_XML);
supportedMediaTypes.add(MediaType.IMAGE_GIF);
supportedMediaTypes.add(MediaType.IMAGE_JPEG);
supportedMediaTypes.add(MediaType.IMAGE_PNG);
supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
supportedMediaTypes.add(MediaType.TEXT_HTML);
supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);
supportedMediaTypes.add(MediaType.TEXT_PLAIN);
supportedMediaTypes.add(MediaType.TEXT_XML);
converter.setSupportedMediaTypes(supportedMediaTypes);
//配置fastjson
FastJsonConfig config = new FastJsonConfig();
//config.setDateFormat("yyyy-MM-dd HH:mm:ss");
//config.setCharset(StandardCharsets.UTF_8);
config.setWriterFilters(new PascalNameFilter());
config.setWriterFeatures(
JSONWriter.Feature.WriteNullListAsEmpty,
//json格式化
JSONWriter.Feature.PrettyFormat,
//输出map中value为null的数据
JSONWriter.Feature.WriteMapNullValue,
//输出boolean 为 false
JSONWriter.Feature.WriteNullBooleanAsFalse,
//输出list 为 []
JSONWriter.Feature.WriteNullListAsEmpty,
//输出number 为 0
JSONWriter.Feature.WriteNullNumberAsZero,
//输出字符串 为 ""
JSONWriter.Feature.WriteNullStringAsEmpty,
//对map进行排序
JSONWriter.Feature.MapSortField
);
converter.setFastJsonConfig(config);
//将fastjson添加到视图消息转换器列表内
converters.add(0, converter);
}
@Override
public void addCorsMappings(CorsRegistry registry) {
//跨域
WebMvcConfigurer.super.addCorsMappings(registry);
CorsRegistration config = registry.addMapping("/**") ;
config.allowCredentials(true); // 允许cookies跨域
//config.allowedOrigins("*");// #允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin
config.allowedOriginPatterns("*");//Vue时用allowedOriginPatterns替换allowedOrigins
config.allowedHeaders("*");// #允许访问的头信息,*表示全部
config.maxAge(18000L); // 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了
config = config.allowedMethods("POST","GET","OPTIONS","HEAD","PUT","DELETE","PATCH");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
JwtHandlerInterceptor handlerInterceptor = new JwtHandlerInterceptor();
registry.addInterceptor(handlerInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/user/login/**");
}
}
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "*");
chain.doFilter(req, res);
}
}
5.SpringBoot和JDK版本兼容性
SpringBoot | JDK | 来源 |
---|---|---|
2.0 | 8 - 9 | https://docs.spring.io/spring-boot/docs/2.0.x/reference/html/getting-started-system-requirements.html |
2.1 | 8-12 | https://docs.spring.io/spring-boot/docs/2.1.x/reference/html/getting-started-system-requirements.html |
2.2 - 2.3 | 8-15 | https://docs.spring.io/spring-boot/docs/2.2.x/reference/html/getting-started.html#getting-started-system-requirements https://docs.spring.io/spring-boot/docs/2.3.x/reference/html/getting-started.html#getting-started-system-requirements |
2.4 | 8-16 | https://docs.spring.io/spring-boot/docs/2.4.x/reference/html/getting-started.html#getting-started-system-requirements |
2.5 | 8-18 | https://docs.spring.io/spring-boot/docs/2.5.x/reference/html/getting-started.html#getting-started.system-requirements |
2.6 | 8-19 | https://docs.spring.io/spring-boot/docs/2.6.x/reference/html/getting-started.html#getting-started.system-requirements |
2.7 | 8-21 | https://docs.spring.io/spring-boot/docs/2.7.x/reference/html/getting-started.html#getting-started.system-requirements |
3.0 - 3.2 | 17-21 | https://docs.spring.io/spring-boot/docs/3.0.x/reference/html/getting-started.html#getting-started |