zoukankan      html  css  js  c++  java
  • springboot

    1、自定义配置

         A、单一属性配置  @Value("${username}") 

                      private String username;

       B、实体类封装

          @ConfigurationProperties(prefix = "stu")

         @Component  ----以上为实体类。 可能pom种需要加入配置处理器依赖
          @Autowired
          private Student student;
    2、JSP支持
    springboot默认不支持JSP。
    如使用,需要在Pom中引入 JSP依赖。
    <!--引入Spring Boot内嵌的Tomcat对JSP的解析包,不加解析不了jsp页面-->
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
            </dependency>
            <!-- servlet依赖的jar包start ,可选-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
            </dependency>
            <!-- servlet依赖的jar包start -->
    
            <!-- jsp依赖jar包start ,可选-->
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>javax.servlet.jsp-api</artifactId>
                <version>2.3.1</version>
            </dependency>
            <!-- jsp依赖jar包end -->
    
            <!--jstl标签依赖的jar包start ,可选-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
            </dependency>
            <!--jstl标签依赖的jar包end -->
    View Code

          并添加Bulid得resource

    3、Mybtais

          MySql默认驱动包版本为8.0.20.正常情况下使用得版本为5...建议<version>5.1.46</version>

        

    <!--SpringBoot 2.3.0 默认的MySQL驱动包版本是8.0.20这个版本对应的是MySQL8
                 而我们使用MySQL版本是5.7.18,所以建议修改驱动包版本问5.1.46
                 否则对时间类型操作时会出现时区的错误,需要连接数据时指定时区
             -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
                <version>5.1.46</version>
            </dependency>
    View Code

         逆向工程插件及mapperxml编译。

      

    <!--添加MyBatis逆向工程插件,这个插件会自动帮我们生成表所对应的实体,以及对应的SQL映射文件
                     以及SQL映射接口
                 -->
                <plugin>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-maven-plugin</artifactId>
                    <version>1.3.6</version>
                    <configuration>
                        <!--配置文件的位置-->
                        <configurationFile>GeneratorMapper.xml</configurationFile>
                        <verbose>true</verbose>
                        <overwrite>true</overwrite>
                    </configuration>
                </plugin>
            </plugins>
    
            <resources>
                <!--通知Maven将SQL映射文件进行编译,否则SQL映射文件是不会被编译打包的 -->
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.xml</include>
                    </includes>
                </resource>
            </resources>
    View Code

      JSP编译支持

     <!--通知Maven将某个目录下的文件进行编译,否则我们的jsp是不会被编译的 -->
                <resource>
                    <!--源文件位置-->
                    <directory>src/main/webapp</directory>
                    <!--编译到META-INF/resources,该目录不能随便写-->
                    <targetPath>META-INF/resources</targetPath>
                    <includes>
                        <!--要把哪些文件编译过去,**表示webapp目录及子目录,*.*表示所有-->
                        <include>**/*.*</include>
                    </includes>
                </resource>
    View Code

        mybatis配置信息

    #配置数据库的链接信息
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    #指定MySQL的链接地址 ?表示连接时的参数,我们的这个参数用于指定编码格式否则链接Linux中的MySQL时容易导致中文乱码
    spring.datasource.url=jdbc:mysql://192.168.188.128:3306/springboot?useUnicode=true&characterEncoding=utf8&useSSL=false
    spring.datasource.username=root
    spring.datasource.password=123456
    View Code

     可在主函数上添加包扫描 @MapperScan("com.bjpowernode.springboot.mapper") 或者直接在mapper文件上使用注解@Mapper

    事务:主函数激活事务支持  @EnableTransactionManagement         方法上使用事务 @Transactional

    4、Restful风格

    @RestController
    public class TestController {
        /**
         *请求路径中的{name}和{age}表示占位符,用于表示这2个位置中的地址路径为请求的参数
         * 控制器方法需要通过@PathVariable("name") 注解将占位符中的数据获取出来并设置到形参中
         * 注意:
         *   1、如果形参的名字与占位符中的名字相同那么@PathVariable可以不指定参数,否则必须指定参数,这个参数
         *     的内容必须与占位符中的名字完全相同
         *   2、Restful风格可以隐藏参数的含义,地址路径中的任何一个位置都可以作为请求的参数进行传递
         *   3、Restful风格不能将请求的数据设置到某个对象里面例如不能将数据写入User对象,因此不建议传递过多的参数
         *   4、由于请求路径中携带了占位符因此,很容易出现请求冲突的问题,例如test请求和test03就是冲突的
         */
        @RequestMapping("/test/{name}/{age}")
        public Object test(@PathVariable("name") String name,@PathVariable("age") Integer age){
            return "name="+name+"  -----  age="+age;
        }
    
        @RequestMapping("/{name}/test/{age}")
        public Object test02(@PathVariable("name") String name,@PathVariable("age") Integer age){
            return "test02 ----  name="+name+"  -----  age="+age;
        }
        @RequestMapping("/test/{age}/{name}")
        public Object test03(@PathVariable("name") String name,@PathVariable("age") Integer age){
            return "test03 ----  name="+name+"  -----  age="+age;
        }
    }
    View Code

    5、Redis

         A、redis配置   (启动 ./redis-server ../redis.conf & 

       

    进入Redis的安装目录执行
    vim redis.conf 
    修改2个位置
    1.将bind 127.0.0.1 修改成 #bind 127.0.0.1
     设置Redis的绑定IP默认是只允许再本机访问注释以后表示可以在任何IP中访问
    
    2将protected-mode  yes 修改成 protected-mode no 
    设置关闭Redis的保护模式
    然后使用指定配置文件的方式重新启动Redis
    View Code

       B、程序配置文件

    #spring.redis.host=192.168.88.131
    #spring.redis.port=6379
    #spring.redis.password=123456
    
    spring.redis.sentinel.nodes=192.168.88.131:26380,192.168.88.131:26382,192.168.88.131:26384
    spring.redis.sentinel.master=mymaster
    spring.redis.password=123456
    View Code
    @RequestMapping("/add")
        public @ResponseBody Object add(String name){
            redisTemplate.setKeySerializer(stringRedisSerializer);
            List<String> names = (List<String>) redisTemplate.opsForValue().get("names");
            if(names == null) {
                names = new ArrayList<>();
            }
            names.add(name);
            redisTemplate.opsForValue().set("names", names);
    
            return "数据添加成功!";
        }
    
        @RequestMapping("/get")
        public @ResponseBody Object get( ){
            redisTemplate.setKeySerializer(stringRedisSerializer);
            List<String> names = (List<String>) redisTemplate.opsForValue().get("names");
            return names;
        }
    View Code

       C、缓存穿透

         2个并发线程模拟

        

     @Autowired
        private UserService userService;
        @RequestMapping("/showUser")
        public @ResponseBody  Object showUser(){
            //List<User> list = userService.showUser();
    
            ExecutorService service = Executors.newFixedThreadPool(2);
            for(int i=0;i<10;i++){
                service.submit(new Runnable() {
                    public void run() {
                        userService.showUser();
                    }
                });
            }
            return "";
        }
    View Code

       redis代码处理

    @Autowired
        private RedisTemplate redisTemplate ;
        private StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        @Override
        //防止缓存穿透
        public List<User> showUser() {
            redisTemplate.setKeySerializer(stringRedisSerializer);
            List<User> userList = (List<User>) redisTemplate.opsForValue().get("userList");
            if(userList==null) {
                synchronized (this) {
                    userList = (List<User>) redisTemplate.opsForValue().get("userList");
                    if (userList == null) {
                        userList = getData();
                        redisTemplate.opsForValue().set("userList", userList);
                        System.out.println("从数据库获取数据");
                    }
                }
            }else{
                System.out.println("从redis中获取数据");
            }
            return userList;
        }

       C、Redis集群  配置文件

         

    #配置Redis的链接信息,链接到哨兵服务器中,然后哨兵服务器会返回当前Redis集群中的主服务器的IP以及端口
    spring.redis.sentinel.nodes=192.168.188.128:26380,192.168.188.128:26382,192.168.188.128:26384
    spring.redis.sentinel.master=mymaster
    spring.redis.password=123456
    View Code

    6、springboot热部署插件

    7、springboot拦截器

       A、自定义拦截器

      

    public class TestInterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("进入了自定义拦截器");
            Object username = request.getSession().getAttribute("username");
            if(username == null){
                response.sendRedirect("/toLogin");
                return false;
            }
            return true;
        }
    }
    View Code

      B、配置类

      

    @Configuration
    public class TestInterceptorConfig implements WebMvcConfigurer {
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            InterceptorRegistration registration = registry.addInterceptor(new TestInterceptor());
            registration.addPathPatterns("/admin/**");
            registration.excludePathPatterns("/admin/test02");
    
        }
    }
    View Code

    8、打包 war jar 及部署

        war包放置到webapps下,tomcat启动时自动解压并启动项目;

       jar包需要手动执行: java -jar xxx.jar

  • 相关阅读:
    最终一致性解决实例
    分布式事务一致性方案
    分布式事务
    OSX
    JAVA
    Eclipse
    Activiti
    CentOS
    用Visual Studio 2015 编写 MASM 汇编程序(二)从头开发一个Win32汇编程序
    Oracle
  • 原文地址:https://www.cnblogs.com/daysafter/p/12979444.html
Copyright © 2011-2022 走看看