栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

springboot的那么一套

springboot的那么一套

springboot

创建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 List getCandidateConfigurations(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和properpties比较

推荐使用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 list;
    private Dog dog;
}
 
@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

dubbo是一个远程调用服务的分布式框架,可以实现远程通讯、动态配置、地址路由等等功能。
比如在入门demo里的暴露服务,使得远程调用的协议可以使用dobbo协议(dubbo://x.x.x.x)或者其它协议,可以配置zookeeper集群地址,实现软负载均衡并配置均衡方式等。
在不搭配注册中心的时候,它也是可以实现服务端和调用端的通信的,这种方式是点对点通信的,所谓“没有中间商”。但是如果配置服务发布和调用端过多特别是集群的方式提供服务的时候,就会暴露许多的问题:增加节点需要修改配置文件、服务端机器宕机后不能被感知等。

它可以通过集成注册中心,来动态地治理服务发布和服务调用。相当于把服务注册和发布推送的功能分摊给了(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坐标

 
     org.springframework.boot
     spring-boot-starter-web

2.未加Component注解报错 3.对于pom文件里的一些爆红有可能是多了空格少了一些标签导致。 4、swagger3.0.0版本问题 4.1.springboot项目检查Maven中所导入的依赖

3.0.0版本:需添加……springboot-starter


            io.springfox
            springfox-boot-starter
            3.0.0

3.0.0版本以下:


            io.springfox
            springfox-swagger2
            2.9.2
        
        
            io.springfox
            springfox-swagger-ui
            2.9.2

4.2.配置Config


3.0.0之前版本需使用@EnableSwagger2注解
3.0.0版本则不需要@EnableSwagger2注解,取而代之是@EnableOpenApi

4.3.swagger-ui界面url地址的改变

3.0.0之前的版本访问是:
/swagger-ui.html
3.0.0版本访问是:
/swagger-ui/index.html

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号