初步使用SpringBoot

整体框架是大佬给我的,我只进行了业务处理,今天初步了解了一下Spring Boot。不对的,请指出,共同学习,谢谢。

Spring Boot+ maven 可以进行快速开发。

在main方法中启动一个SpringApplication,启动方法是run方法。

默认启动步骤:

1)创建一个合适的ApplicationContext实例,这个实例取决于classpath。

2)注册一个CommandLinePropertySource,以spring属性的形式来暴露命令行参数。

3)刷新ApplicationContext,加载所有的单例bean。

4)触发所有的命令行CommanLineRunner来执行bean。

 

对于配置文件:application.yml

配置文件内容:

1. 不同“等级” 用冒号隔开
2. 次等级的前面是空格,不能使用制表符(tab)
3. 冒号之后如果有值,那么冒号和值之间至少有一个空格,不能紧贴着

---------- 此为服务配置

server:
  port: 8888
spring.freemarker.view.prefix: /webapp/
spring.freemarker.suffix: .html
spring.mvc.static-path-pattern: /static/**
resource:
  tmpDir: G://tmp/ #临时文件夹

--------- 此为数据库连接

mysqlLink:
  jdbcUrl: jdbc:mysql://127.0.0.1:3306/xx
  driverClass: com.mysql.jdbc.Driver
  user: a
  password: a

--------- 此为redis配置
  
redisConfig:
  host: 127.0.0.1
  port: 6379
  password: zhgd
  cacheName: a

 

添加ConcurrentHashMap(锁分段技术)的使用环境:

1.ConcurrentHashMap允许并发的读和线程安全的更新操作

2.在执行写操作时,ConcurrentHashMap只锁住部分的Map

3.并发的更新是通过内部根据并发级别将Map分割成小部分实现的,求总长度时,可能会有数据不全等问题,需要锁住map,求size

4.高的并发级别会造成时间和空间的浪费,低的并发级别在写线程多时会引起线程间的竞争

5.ConcurrentHashMap的所有操作都是线程安全

6.ConcurrentHashMap返回的迭代器是弱一致性,fail-safe并且不会抛出ConcurrentModificationException异常

7.ConcurrentHashMap不允许null的键值

8.可以使用ConcurrentHashMap代替HashTable,但要ConcurrentHashMap不会锁住整个Map
 

 

Spring Boot实现了自动配置,降低了项目搭建的复杂度。

Spring框架需要进行大量的配置,Spring Boot引入自动配置的概念,让项目设置变得很容易。

Spring Boot本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。

集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box),大部分的Spring Boot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。

Spring MVC 是一个框架;Spring Boot 是一套快速开发整合包。

现在开始举例:映射

index.html

@RestController
public class IndexController {
    @GetMapping("/")
    ModelAndView index() {
        ModelAndView ret=new ModelAndView("index");
        List<Kv> services=new ArrayList<>(2);
        services.add(Kv.by("link","config").set("name","aa"));
        services.add(Kv.by("link","control").set("name","bb"));
        ret.addObject("services", services);
        return ret;
    }
}
 
RestController = responseBody + controller的组合,返回的数据是json格式。


当前文件名称是:index.html

/config/其他文件

@RestController
@RequestMapping("/config/xx")
public class CfgSetBroadCastController {
    
    @GetMapping
    public ModelAndView index(){
        ModelAndView ret=new ModelAndView("adapterCfg/xx");
        Map<String, String> paramMap = getBroadCastParam();
        ret.addObject("bcastParam", paramMap);
        return ret;
    }
    
    @RequestMapping(value="/updatexx", method = RequestMethod.POST)
    @ResponseBody 
    public Object updateBroadCast(HttpServletRequest request){
        Map<String, Object> map = new HashMap<String,Object>();
        map.put("data", aa);
        return map;
    }
 
1.当前java文件的映射地址为 IP:port/config/xx
2.index()方法中,返回的信息为bcastParam,信息返回页面在adaterCfg/xx.html
3.updateBroadCast()方法的路劲为 IP:port/cofing/xx/updatexx
4.updateBroadCast()方法中返回的数据 Map

 

参数设置

@Controller
@RequestMapping("/config")
public class CfgIndexController {
    
    @Resource(name="adpaterCfgService")
    private AdapterCfgService adpaterCfgService = new AdapterCfgService();
    
    @GetMapping
    public ModelAndView index() {
        ModelAndView ret=new ModelAndView("adapterCfg/index");
        List<Record> records = adpaterCfgService.getAllMenu();
        ret.addObject("allMenu", records);
        return ret;
    }
    
    @RequestMapping("/{name}")
    public String equipStatus(@PathVariable(name = "name") String name){
        return "adapterCfg/"+name;
    }
    
    @RequestMapping("/brAreaSelector")
    public String brAreaSelector(){
        return "adapterCfg/brAreaSelector";
    }
}
 
1.此java文件的路劲为 IP:port/config
2.service文件需要注解 @Resource(name="service的名称")
3.index()文件所指页面 IP:port/adapter/index.html,返回数据 allMenu
4.equipStatus()方法,@PathVariable(name = "name") String name  --- 参数设置,返回内容是页面地址 IP:port/config/adaptercfg/参数name

 


简单的service文件

@Service("adpaterCfgService")
public class AdapterCfgService {
 
    public List<Record> getAllMenu(){
        List<Record> records = Db.find("select * from text");
        return records;
    }
}
 
service文件需要注解 @Service("名称")

 

先展示我Spring Boot的基本框架,所有js文件和css文件保存在static中,html文件保存在templates中。 

从servlet中返回数据到前台中:

使用的FreeMarker文件取出数据: 转载地址:https://blog.csdn.net/pengpengpeng85/article/details/52070602

 

举例几个接收的数据:

<script>
    <#assign  keys=bcastParam?keys/>//bcastParam是我返回内容Map<String,String>
    <#list keys as key>//循环list
        $("input[name='regionCode']").val("${bcastParam['regionCode']!''}");
        //取出bcastParam['regionCode']值,如果没有值,则返回空
    </#list>
</script>

 

//FreeMarker 也可以嵌入到标签中使用
<tbody id="tableBody">
    <#list timeBroadCasts as time>//循环list
        <tr>
            <td>${time.pattern}</td>
            <td>
                <#list time.channel?split(",") as outputChannel>//将time.channel分割
                    <#if outputChannel =="1">aa</#if>//if进行判断,然后复制
                    <#if outputChannel =="2">bb</#if>
                       <#if outputChannel =="3">cc</#if>
                       <#if outputChannel =="4">dd</#if>
                 </#list>
            </td>
            <td>${time.createTime}</td>
            <td><button class=" layui-btn-small layui-btn layui-btn-danger" onclick="deleteTimeBroadCast(${time.id})">删除</button></td>
        </tr>
    </#list>
</tbody>


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值