赞
踩
约定大于配置
简化版javaWeb开发框架,开箱即用
对比spring配置大大减少
微服务:架构风格
配置文件能配置什么?
配置格式:
application.properties: key=value
application.yaml:key: 空格value
语法:
# 普通的key-value name: yangs # 对象 student: name: yangs age: 1 # 行内写法 student: {name: yangs, age: 1} # 数组 pets: - cat - dog - pig # 行内写法 pets: [cat, dog, pig]
使用配置文件与java类绑定,为其属性赋值
方法一 :
.yaml配置文件,可以使用表达式配置默认值等
在对应的类上添加注解:
@ConfigurationProperties(prefix=“.yaml中的key名”)
方法二:
.properties配置文件
两种配置文件对比
.yaml文件对比.properties 可用保存对象,数组,但是对空格要求高
.properties 只能存键值对,如:student.name = yangs
JSR303校验
yaml支持JSR303校验
多环境配置
server:
port: 8080
spring:
profiles:
active: dev
---
server:
port: 8081
spring:
profiles:
active: test
pom.xml
主程序:
@SpringBootApplication:标注这个类是springboot的应用,启动类下的所有资源被导入
@SpringBootConfiguration
–@Configuration:spring配置类
----@Component:说明是一个组件类
@EnableAutoConfiguration:自动配置
– @AutoConfigurationPackage:自动配置包
----@Import({AutoConfigurationPackages.Registrar.class}):自动配置包注册
– @Import({AutoConfigurationImportSelector.class}):导入选择器
---- getAutoConfigurationEntry:获取自动配置实体
---- getCandidateConfigurations:获取候选配置
------ SpringFactoriesLoader.loadFactoryNames:加载核心自动配置文件
-------- getSpringFactoriesLoaderFactoryClass:获取所有被@EnableAutoConfiguration注解标注的类(@SpringBootApplication)
自动配置核心文件:META-INF/spring.factories
自动配置文件导入包:META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
结论:springboot所有的自动配置都是在启动的时候扫描并加载:spring.factories。但不一定生效,只要导入了对于的starter自动配置才会生效
核心注解:@ConditionalOnxxx
run方法
配置文件装配原理
@EnableConfigurationProperties
精髓
查看组件是否生效
在配置文件中配置 debug = true,启动时,日志打印
要解决的问题:
静态资源
处理静态资源的方法
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};
首页
需要模板引擎的支持,thymeleaf接管所有的静态资源,@{}
Thymeleaf模板引擎
Thymeleaf语法
官网:https://www.thymeleaf.org/
MVC装配
实现WebMvcCongfigurer接口
实现ViewResolver 视图解析器接口,重写resolverViewName方法
底层调用doDispatcher方法
在springboot中,有非常多的xxxxConfiguration帮助我们扩展配置,看到这个类就要注意看他扩展了哪些功能!
国际化
拦截器
登录后才能访问首页
前端
ServletRegistrationBean
FilterRegistrationBean
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:
Remote Procedure Call 远程过程调用(跨服务器调用)
两个核心模块:通信、序列化
注册中心,提供了分布式独享锁、选举、队列的接口。
工具:dubbo-admin
是一个监控管理后台,可以监控注册了哪些服务,哪些服务被消费了
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.0.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
dubbo:
application:
name: dubbo-springboot-demo-provider
protocol:
name: dubbo
port: -1
registry:
id: zk-registry
address: zookeeper://127.0.0.1:2181
config-center:
address: zookeeper://127.0.0.1:2181
metadata-report:
address: zookeeper://127.0.0.1:2181
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
public static void main(String[] args) throws Exception {
new EmbeddedZooKeeper(2181, false).start();
SpringApplication.run(ProviderApplication.class, args);
System.out.println("dubbo service started");
new CountDownLatch(1).await();
}
}
public interface DemoService {
String sayHello(String name);
}
//@Service //dubbo包下的
@Component //尽量不使用Service,会与dubbo的重名
@DubboService //2.2.7版本以上使用
public class DemoServiceImpl implements DemoService {
@Override
public String sayHello(String name) {
System.out.println("Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
return "Hello " + name;
}
}
dubbo:
application:
name: dubbo-springboot-demo-provider
protocol:
name: dubbo
port: -1
registry:
id: zk-registry
address: zookeeper://127.0.0.1:2181
config-center:
address: zookeeper://127.0.0.1:2181
metadata-report:
address: zookeeper://127.0.0.1:2181
public class ConsumerApplication {
@DubboReference
private DemoService demoService;
}
@SpringBootApplication
@Service
@EnableDubbo
public class ConsumerApplication {
@DubboReference
private DemoService demoService;
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(ConsumerApplication.class, args);
ConsumerApplication application = context.getBean(ConsumerApplication.class);
String result = application.doSayHello("world");
System.out.println("result: " + result);
}
}
注意:@EnableDubbo 是必须的
前后端分离主流框架: Vue + SpringBoot
后端:后端控制层、服务层、数据访问层
前端:前端控制层、视图层
前后端交互:API接口
** Swagger**
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
测试访问swagger: http://localhost:8080/swagger-ui.html
Docket的方法:
new Docket(DocumentationType.SWAGGER_2)
//配置swagger信息
.apiInfo(new ApiInfo())
//默认true,false时浏览器中无法访问swagger:http://localhost:8080/swagger-ui.html
.enable(false)
//配置扫描接口
.select()
//配置要扫描接口的方式:any,none,basePackage,withClassAnnotation,withMethodAnnotation
.api(RequestHandlerSelectors.basePackage("包名"))
.build();
.groupName("组名")
配置多个分组:
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("A");
}
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("B");
}
//1. 控制类注释
@ApiOperation(“”)
//2. 实体类注释 == 等价@Api(“”)
@ApiModel(“”)
//3. 属性注释
@ApiModelProperty(“”)
使用swagger的好处:
TaskScheduler 任务调度名
TaskExecutor 任务执行者
@EnableScheduling //开启定时功能的注解
@Scheduled //什么时候执行
cron表达式
cron表达式
秒 分 时 日 月 周几
0 10 10 * * ? //每天的10点10分0秒执行
30 0/5 10,18 * * ? //每天10点和18点每5分钟执行
…
@Scheduled(cron = “0 10 10 * * ?”)
anno:无需认证就可以访问
authc:需要认证后才能范围
user:必须拥有记住我功能才能用
perms:拥有对某个资源的权限才能访问
role:拥有某个角色权限才能访问
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。