创建springboot:
自动配置:
pom.xml
spring-boot-dependencies:核心依赖在父工程中!我们在写或者引入一些Springboot以来的时候,不需要指定版本,就因为有这些版本仓库
启动器
org.springframework.boot spring-boot-starter
启动器:说白了就是Springboot的启动场景;
主程序入口:
@SpringBootApplication
public class Demo2Application {
public static void main(String[] args) {
SpringApplication.run(Demo2Application.class, args);
}
}
注解:
@SpringBootConfiguration
@SpringBootConfiguration
@EnableAutoConfiguration
@EnableAutoConfiguration //自动配置
@AutoConfigurationPackage//自动配置包
@import({Registrar.class})//导入包注册
@import({AutoConfigurationimportSelector.class})//导入自动导入选择器
//获取所有配置
List configurations = this.getCandidateConfigurations(annotationmetadata, attributes);
获取候选配置:
protected ListgetCandidateConfigurations(Annotationmetadata metadata, AnnotationAttributes attributes) { List configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()); Assert.notEmpty(configurations, "No auto configuration classes found in meta-INF/spring.factories. If you are using a custom packaging, make sure that file is correct."); return configurations; }
结论: springboot所有自动配置都是在启动时候扫描并加载,spring.facotries所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要写入对应的start,就有对应的启动器了,有了启动器。我们自动装配就会生效,然后就配置成功。
- springboot在启动的时候将这些自动配置的类导入容器,自动配置就会生效。以前我们需要自动配置的东西,整合JavaEE,解决方案和自动配置springboot-autoconfigure-2.2.0.RELEASE.jar这个包下它会把所有需要导入的组件,以类名的方式返回,这些组件就会配添加到容器;容器中也会存在非常多的xxxAutoConfiguration的文件(@Bean),就是这些类给容器中导入了这个场景需要的所有组件,@Configuration,JavaConfig!有了自动配置类,免去了我们手动编写配置文件的工作!
推荐使用yml配置
server:
port: 8081
person:
name: xcg
happy: false
age: 3
birth: 2000/3/22
maps: {k1: v1,k2: v2}
list:
- code
- music
- girl
dog:
name: 旺财
age: 10
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Boolean happy;
private Integer age;
private Date birth;
private Map maps;
private List
| @ConfigurationProperties | @Value | |
|---|---|---|
| 功能 | 批量注入配置文件 | 一个个指定 |
| 松散绑定 | 支持(原Do层为lastName而配置中是last-name) | 不支持 |
| SpEL | 不支持 | 支持 |
| JSR303 | 支持 | 不支持 |
| 复杂类型对接 | 支持 | 不支持 |
JSR303校验:(@Validated)
多环境配置及配置文件位置环境配置的优先级及位置:
- file:./config/file:./classpath:/config/classpath:/
激活其他配置文件名
命名方式: application-{profile}.properties
再application.properties中激活:
# 激活其他配置文件 spring.profiles.active=dev
yml方式:
server:
port: 8081
spring:
profiles:
active: dev
---
server:
port: 8082
spring:
profiles: dev
---
server:
port: 8083
spring:
profiles: test
自动装配
SpringBoot Web开发
解决的问题:
导入静态资源首页jsp,模板渲染引擎装配扩展SpringMVC增删改查拦截器国际化
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
ServletContext servletContext = getServletContext();
addResourceHandler(registry, "/webjars
public void sendSmartMail(String title, String text, boolean html, Map upTo,String setTo,String setFrom) throws MessagingException {
//一个复杂邮件
MimeMessage mimeMessage = mailSender.createMimeMessage();
//组装
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage,true);
//正文
messageHelper.setSubject(title);
messageHelper.setText(text,html);
//附件
Iterator> entries = upTo.entrySet().iterator();
while(entries.hasNext()){
Map.Entry entry = entries.next();
messageHelper.addAttachment(entry.getKey(),entry.getValue());
}
//发送的人
messageHelper.setTo(setTo);
messageHelper.setFrom(setFrom);
mailSender.send(mimeMessage);
}
}
定时任务
1、开启注解
@EnableScheduling
2、在需要定时执行的语句上加入@Scheduled(cron = "0/2 * * * * ?")
分布式Dubbo+Zookeeper+springboot可视化界面及部署zookeeperdubbo是一个远程调用服务的分布式框架,可以实现远程通讯、动态配置、地址路由等等功能。
比如在入门demo里的暴露服务,使得远程调用的协议可以使用dobbo协议(dubbo://x.x.x.x)或者其它协议,可以配置zookeeper集群地址,实现软负载均衡并配置均衡方式等。
在不搭配注册中心的时候,它也是可以实现服务端和调用端的通信的,这种方式是点对点通信的,所谓“没有中间商”。但是如果配置服务发布和调用端过多特别是集群的方式提供服务的时候,就会暴露许多的问题:增加节点需要修改配置文件、服务端机器宕机后不能被感知等。它可以通过集成注册中心,来动态地治理服务发布和服务调用。相当于把服务注册和发布推送的功能分摊给了(zookeeper)注册中心。
1、下载zookeeper及常用的可视化界面dubbo-admin
zookeeper地址:http://archive.apache.org/dist/zookeeper
dubbo-admin:https://github.com/apache/dubbo-admin/tree/master
2、配置zookeeper(bin->zkServer.cmd)遇到闪退在zkServer.cmd里添加pause
3、打包dubbo-admin
mvn clean package -Dmaven.test.skip=true
4、开启dubbo-admin
先开启zookeeper服务,然后运行dubbo-admin的jar包
账户默认:root
密码默认:root
与springboot 简单集成1、导入依赖
org.apache.dubbo dubbo-spring-boot-starter 2.7.8 com.github.sgroschupf zkclient 0.1 org.apache.curator curator-framework 2.12.0 org.apache.curator curator-recipes 2.12.0 org.apache.zookeeper zookeeper 3.4.14 org.slf4j slf4j-log4j12
2、配置properties
#==============================provider================================= # 服务应用名字 dubbo.application.name=provider # 注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 # 那些服务被注册 dubbo.scan.base-packages=com.xv.service #===============================customer================================= # 消费者取哪里拿服务需要暴露自己的名字 dubbo.application.name=customer # 注册中心的位置 dubbo.registry.address=zookeeper://127.0.0.1:2181
3、注册服务,示例
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;
@DubboService //可以被扫描到,在项目已启动就自动注册到注册中心
@Component //使用Dubbo后,不需要使用Service注解
public class TicketServiceImpl implements TicketService{
@Override
public String getTicket() {
return "《徐朝刚分布式1》";
}
}
4、已经注册的服务进行调用
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;
@Service
public class UserService {
//注册中心拿
@DubboReference
TicketService ticketService;
public void buyTicket(){
String ticket = ticketService.getTicket();
System.out.println("在注册中心拿到服务=>"+ticket);
}
}
5、注意启动时要先打开zookeeper服务然后运行两个程序。
问题集锦: 1.项目启动就立刻结束出现这种问题的主要原因是,项目现在没有成为一个web项目,项目中并没有相关的tomcat等的服务器,所以项目运行就结束!
如果想要一直运行,就需要在pom文件中加入对应的web坐标
2.未加Component注解报错 3.对于pom文件里的一些爆红有可能是多了空格少了一些标签导致。 4、swagger3.0.0版本问题 4.1.springboot项目检查Maven中所导入的依赖org.springframework.boot spring-boot-starter-web
3.0.0版本:需添加……springboot-starter
io.springfox springfox-boot-starter 3.0.0
3.0.0版本以下:
4.2.配置Configio.springfox springfox-swagger2 2.9.2 io.springfox springfox-swagger-ui 2.9.2
3.0.0之前版本需使用@EnableSwagger2注解
3.0.0版本则不需要@EnableSwagger2注解,取而代之是@EnableOpenApi
3.0.0之前的版本访问是:
/swagger-ui.html
3.0.0版本访问是:
/swagger-ui/index.html



