所有的

springboot


1.logback日志框架
2.webjars静态资源映射
3.Thymeleaf模板引擎


层级关系要显示清楚,在设置里有一个
compact middle package 把勾去掉


用于标识springboot启动类
@SpringBootApplication
    底层是3个组件:@springbootConfiguration
                   @EnableAutoConfiguration
                   @ComponentScan


jar包运行,打好jar包,控制台可以看到jar包存放路径
cd C:\Users\Administrator\Desktop
java -jar springboot-hello-SNAPSHOT.jar

validator
数据校验器

quartz
定时器

springboot各种组件依赖
https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/htmlsingle/#using-boot-starter


springboot启动类要与controller,service这些包同级,属于同一个包下,启动时才能扫描到那些东西里的组件
 

 

 

springboot启动类要与controller,service这些包同级,属于同一个包下,启动时才能扫描到那些包里的组件,也能扫描到与启动类同级的类。(可以扫描到兄弟的儿子,和自己的兄弟,不能扫描到爸爸的兄弟的儿子)

yml配置文件语法特别注意list数组元素的 - 后面也要有空格
  list:
    - one
    - two

Alt+insert  快捷键set和get方法和tostring()    生成

@ConfigurationProperties(prefix = "emp" ) 一般放在组件类上的注解 可以将application.yml或application.properties这两个全局配置文件中的属性和组件类中的属性一一对应绑定,emp是某前缀名,可以去搜寻yml中的这个属性前缀
@Component 把当前组件收纳为springboot管理


测试类里需要有@RunWith(SpringRunner.class) 可以把所有组件都直接扫描到来运行

配置文件有中文:
settings里的file encodings修改

@Value 可以替代@ConfigurationProperties 来在实体类中获取到配置文件里对应属性的值
@Value("${emp.name}") 或者是spring表达式直接赋值  @Value("#{20}") / @Value("20")

 

@Value   和  @ConfigurationProperties  的区别对比

     @Value    @ConfigurationProperties
松散绑定语法(大小写有区别或者有符号)    不支持    支持
spel(spring表达式,比如一些运算)    支持    不支持
复杂类型封装(比如map,list)    不支持    支持
JSR303数据校验(@Validated+@Email)    不支持    支持
 

总结:少量的不涉及复杂类型封装和数据校验的用@Value,其他都用@ConfigurationProperties

 

新创建的局部配置文件与组件类绑定的注解
@PropertySource(value = {"classpath:emp.properties"})


想要加载xml的信息,在主配置类(也就是springboot启动类)上添加注解
@ImportResource(locations ={"classpath:spring01.xml "} )


yml可以通过 --- 分成块,每块都可以有各自的配置,相同的配置也可以

profile多环境支持
第一种:yml全局配置格式

spring
  profiles:
    active: xx

第二种:
在项目里的Environment的program arguments写上
spring.profiles.active=xx

第三种:jar包
运行jar包命令后加 --spring.profiles.active=xx

配置文件的默认扫描级别(从高到低)

工程的config的properties
工程的properties
resources的config的properties
resources的properties

备注:如果有多个工程,放在当前工程下的properties或config里的properties在被扫描时会扫描到第一个工程的工作目录,所以
当前工程的配置文件路径
在项目里的Environment的Working directory写上
$MODULE_DIR$

 

配置文件属性网址

https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/htmlsingle/#common-application-properties
 

 

日志框架logback          上层的抽象层slf4j

日志级别由低到高:trace springboot默认为info级别,比它低级别的就不显示了,因为不重要


修改某个包日志级别:
properties配置文件中,如果是yml对应修改
logging.level.com.mengxuegu=debug
包名=级别

修改springboot日志级别:
properties配置文件中,如果是yml对应修改
logging.level.root=debug


日志输出的两个配置

logging.file    logging.path    配置示例    说明
指定文件名    none    
springboot.log

或者D:/springboot.log

输出到当前根目录下的springboot.log

或者指定磁盘路径

none    指定目录    /springboot/log    输出到当前项目所在磁盘根目录下的/springboot/log/的新创建的spring.log中
两个都配置时         执行logging.file的配置,也是springboot推荐配置,因为logging.file也可以指定磁盘路径完成logging.path的功能
踩坑:较新版本springboot已经将logging.file修改为logging.file.name

                                      将logging.path修改为logging.file.path

 

修改控制台日志输出格式:

logging.pattern.console=%d{yyyy-MM-dd} == [%thread] == %-5level == %logger{50} - %msg%n

 

修改日志文件输出格式:

logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} >>> [%thread] >>> %-5level >>> %logger{50} >>> %msg%n

 

springboot规定使用logback框架的配置文件名是logback.xml,放在resources下

其他框架的配置文件名和放置位置可以查看官方文档,网址:

https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/htmlsingle/#boot-features-logging

 

多环境下的日志自定义,需要用logback-spring.xml这个名称
放在logback-spring.xml的第一个layout里面可以配置不同环境下的日志输出格式


                
                %d{yyyy-MM-dd HH:mm:ss.SSS} - [%thread] - %-5level - %logger{50} - %msg%n
            

properties中也要对应配置profiles配置

 

默认是logback日志框架,切换成log4j2日志框架:

https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/htmlsingle/#boot-features-logging

找到13.5 Starters  

找到spring-boot-starter-log4j2
在pom里替换掉spring-boot-starter-logging
 

输出某日志

Logger logger = LoggerFactory.getLogger(getClass());
logger.info("xxx");
 

 

 

webjars官网

webjars.org

引入依赖


    org.webjars
    jquery
    3.3.1


静态资源的获取目录(js或者css)
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/
欢迎页index.html      图标ico    
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/
+
和根目录路径
 

 

引入Thymeleaf依赖
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        


html里的动态text示例
先加上这个命名空间格式



引入公共片段
被别人引入的header.html
这是声明公共片段
去引入别人的

与th:replace相似的是th:insert
区别:使用th:insert,公共片段的标签和当前标签都会保留,而th:replace会将公共片段的标签全部覆盖当前标签
 

 

th:each迭代,有多少个key就迭代多少次

user是第一个值,也有第二个值iterStat,(这里只是举例,名字随便取),第二个值有以下属性
index : 当前迭代下标 0 开始
            count : 当前迭代下标 1 开始
            size  : 获取总记录数
            current : 当前迭代出的对象
            even/odd : 当前迭代是偶数还是奇数 (1开始算,返回布尔值)
            first : 当前是否为第一个元素
            last : 当前是否为最后一个元素

总结:第二个值主要是可以得到记录数,奇偶数这些遍历出来记录的属性

th:if  动态判断,来决定显不显示标签内容

显示出来说明不空

th:switch  动态指向


       

value1


       

value2

th:utext
可以不转义特殊字符,展现它的效果

th:Object  可以直接取出对象


开发环境中使用thymeleaf的热部署
依赖:

        org.springframework.boot
        spring-boot-devtools
        

properties里
springspring.thymeleaf.cache=false

热部署需要写完后按ctrl+F9

 

 

html
       

       

  •   


     

     

    自定义springmvc的配置

    配置类 实现 WebMvcConfigurer类
    类上用@Configuration是配置类
    类上用@EnableWebMvc来使springboot对springmvc的自动配置都失效

    总结 SpringMVC 配置:
    进公司拿到项目之后,在Spring Boot中自已配置组件的时候,先看容器中有没有公司自已配置的
    (@Bean、@Component),如果
    有就用公司自已配置的; 如果没有,才自动配置。


    阿里云
    284085


    密码:kA2GYmE4cJgiSLE0

    wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-
    bin.tar.gz


    部署了一个网站,可以访问一下
    http://47.115.152.213:8080/
    账户:root
    密码:123
     

    获取当前日期的html



    <br />



        


        
        

     

     

    判断密码为123且用户名不为空
    if (!StringUtils.isEmpty(username)&& "123".equals(password))


    用户名密码输错了,显示的报错字体
    th:if="${not #strings.isEmpty(msg)}" th:text="${msg}"

    拦截/xx未登录请求
    现在login的控制层设置一个HttpSession session变量,用于装是否登录信息
    如果登陆了给session一个值,即session为空,就是未登录
    session.setAttribute("loginUser", username);

    interceptor包下
    public class LoginHandlerInterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse
    response, Object handler) throws Exception {
                Object loginUser = request.getSession().getAttribute("loginUser");
                    if( loginUser != null) {
                    return true;
            }
            request.setAttribute("msg", "没有权限,请先登录!");
            //因为要带上面那条提示信息
            request.getRequestDispatcher("/index.html").forward(request, response);
            return false;
        }
    }

    以上是定义登录拦截器,把它交给springboot管理
    在config包下
    @Configuration
    public class MySpringMvcConfigurer {
        @Bean
        public WebMvcConfigurer webMvcConfigurer() {
            return new WebMvcConfigurer(){
                @Override
                public void addInterceptors(InterceptorRegistry registry) {
                    registry.addInterceptor(new LoginHandlerInterceptor())
                            //指定要拦截的请求 /** 表示拦截所有请求
                            .addPathPatterns("/**")
                            //排除不需要拦截的请求路径
                            .excludePathPatterns("/", "/index.html", "/login")
                            //springboot2+之后需要将静态资源文件的访问路径 也排除
                            .excludePathPatterns("/css/*", "/img/*","/js/*");
                }
            };

    获取访问的用户名(hi,xx)
    [[${session.loginUser}]]


    退出系统,loginController里面创建一个方法
    th:href="@{/logout}"


    session的方法:
    setAttribute     存入信息
    removeAttribute  移除信息
    invilidate       销毁session

    RestFul架构:请求URI:/资源名称/资源标识
    查询:   xx - GET
    添加     xx - POST
    修改     xx - PUT
    添加     xx - DELETE


    @Repository注解用于dao层的类标识为springboot的bean,交给springboot管理

    两个参数注解
    2("pid") Integer pid             和mapping("xx/pid")一致
    @RequestParam(value = "providerName", required = true,defaultValue = "view") String providerName        mvc中传入参数

    ps:@RequestParam注解中,没写defaultValue时,required默认为true;写了defaultValue时可以不用写required本身
    ps:@PAthVariable  通常用在查询,修改,删除方法中获取记录的唯一id的注解


    信息回显:
    th:value="{$provider.xx}"

    修改资源路径
    th:href="@{/provider/} + ${p.pid}"

    th:action="@{/provider}"


    修改信息方法注解
    @PutMapping(“/provide/{pid}”)


    添加信息方法注解
    @PostMapping("/provide{pid}")


    删除信息方法注解
    @DeleteMapping("/provide{pid}")
     

     

    绑定属性
    th:attr="del_uri=@{/provider/}+${p.pid}"

    springboot1.0,2014年发布,默认数据库连接池为 Tomcat JDBC Pool
    springboot2.0,2018年3月1日发布,默认数据库连接池为  Hikari


    1.项目创建选择组件:mysql,jdbc    web

    application.yml里:

    spring:
    datasource:
    username: root
    password: root
    #使用 MySQL连接驱动是8.0以上,需要在Url后面加上时区, GMT%2B8代表中国时区,不然报时区
    错误
    url: jdbc:mysql://127.0.0.1:3306/jdbc?serverTimezone=GMT%2B8
    # 注意: 新版本驱动包,要使用以下类作为驱动类
    driver-class-name: com.mysql.cj.jdbc.Driver


    @RestController注解=@Controller+@ResponseBody

    druid


    com.alibaba
    druid
    1.1.12

    mybatis
    创建项目    选择mybatis,jdbc,mysql   web


    @MapperScan("com.mengxuegu.springboot.mapper")会自动装配指定包下面所有Mapper,省得在
    每个Mapper上面写@Mapper

    Mybatis官网: http://www.mybatis.org/mybatis-3/zh/index.html
    mybatis通常用xml方式,小项目才用注解方式

    在 resources 创建以下目录和核心配置文件mybatis-config.xml与mapper映射文件夹
    mapper下一般装xxmapper.xml

    mybatis-config.xml里加上驼峰映射

        
        
            
        


    application.yml里

    #配置mybatis相关文件路径
    mybatis:
      #映射配置文件路径
      mapper-locations: classpath:mybatis/mapper/*.xml
      #核心配置文件路径
      config-location: classpath:mybatis/mybatis-config.xml

    IOexception
    servletexception
    SQLException
    InterruptedException
    MessagingException
    UnknownHostException
    RuntimeException
     

     

    @Entity //说明 它是和数据表映射的类
    @Table(name = "tbl_user") //指定对应映射的表名,省略不写默认表名是类同 user


    jpa里的注解
    @Id //指定主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)    主键自增长注解

    @Column(name = "user_name",length = 5) //这是和数据表对应的一个列,如果省略括号里的列名,就默认为下面的属性名

    jpa结构:
    实体类;
    dao接口: 创建 UserRepository 接口继承 JpaRepository , 就会crud及分页等基本功能
    JpaRepository<实体类,id的类型>


    yml全局配置
    # jpa相关配置 spring.jpa.*
    jpa:
    # 控制台显示SQL
    showSql: true
    hibernate:
    # 会根据就映射实体类自动创建或更新数据表,这里已经创建了,就不用create
    ddl-auto: update
    # 默认创建表类型是MyISAM,是非事务安全的,所以无法实现事物回滚
    # 指定如下方言: 创建的表类型是Innodb,才可以进行对事物的回滚。
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect

    事务管理步骤:
    1. 在启动类上 ,使用 @EnableTransactionManagement 开启注解方式事务支持
    2. 在 Service层方法上添加 @Transactional 进行事务管理

     

     

    快捷键Shift+F6 重命名


    @EnableAysnc 在启动类上开启基于注解的异步任务
    @Aysnc     在service里的方法上的注解,标识后的方法会异步执行


    @EnableScheduling 启动类上开启基于注解的定时任务

    @Scheduled 标识的方法会进行定时处理,该注解的属性是cron=xx
    在线生成cron表达式 http://cron.qqe2.com/

    选择组件时:Core里的Cache
    @EnableCaching:在启动类上,开启基于注解的缓存
    @Cacheable : 标在方法上,返回的结果会进行缓存(先查缓存中的结果,没有则调用方法并将结果放到缓存中),
    该注解的属性有value/cacheNames  :缓存的名字key : 作为缓存中的Key值,可自已使用 SpEL表达式指定(不指定就是参数值), 缓存结果是方法返回@CachePut    缓存更新
    @CacheEvict   清除缓存
    @CacheConfig(cacheNames = “user”) 指定缓存公共属性值 ,指定在类上,其他方法上就不需要写缓存名。
     


    本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部