Spring Boot入门第二篇

第一天的详见:https://www.cnblogs.com/LBJLAKERS/p/12001253.html

  • 同样是新建一个pring Initializer快速创建Spring Boot项目.
  • 在resource的目录下新建两个application-dev.properties/application-pro.properties属性文件分别代表开发环境和生产环境。如图:

指定使用的属性配置文件

一:通过默认的application.properties指定。

  • 可以在默认的application.properties的文件中激活某个文件:

    #正式环境
    #表示激活的是哪一个属性文件
    spring.profiles.active=pro
  • 在dev的属性文件可以配置端口为:
     #开发环境
    server.port=
  • 在Pro的属性文件可以配置端口号为:
    #生产环境
    server.port=

  使用以上的方式如果去运行程序的话,在控制台就会显示激活pro的属性文件,使用的pro的端口

二:如果没有application.properties的属性文件,那么可以通过配置的方式来配置。虚拟机参数;

如上图所示的VM options的配置即可。

三、使用命令行的方式激活使用的属性配置文件。

  • 打包项目为jar包,在cmd的命令窗口切换到jar包的目录,使用命令:

    java -jar spring-boot-config-0.0.-SNAPSHOT.jar --spring.profiles.active=dev;

yml支持的多文档模块方式。

  使用(---)两个横线的方式将文档分割成三个文档的模式。使用这种方式可以激活dev模块的文档

 spring:
profiles:
active: dev
---
server:
port:
spring:
profiles: dev ---
server:
port:
spring:
profiles: pro

 配置文件加载位置

  springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文。

  在项目中加载的顺序为:(优先级由高到底,高优先级的配置会覆盖低优先级的配置;SpringBoot会从这四个位置全部加载主配置文件;互补配置;)

   

  le:./config/
  –file:./
  –classpath:/config/
  –classpath:/

  注意:一般将配置文件放在resources目录下,这样在打包的时候就直接会将配置文件一同打包,否则不能够将配置文件一起打包为jar。并且所有的配置都可以在命令行上进行指定,

     例如在cmd的命令窗口下:java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar

     如果非要将application.properties的配置文件放到非resources的目录下,在cmd的命令窗口可以这样指定:

java -jar spring-boot--config--0.0.-SNAPSHOT.jar  --spring.config.location=配置文件存放的位置  --配置文件中的配置

    这样才能生效

    参看文档:https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#boot-features-external-config

自动配置文件的原理:

  • SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration
  • @EnableAutoConfiguration 作用:
    • 利用EnableAutoConfigurationImportSelector给容器中导入一些组件?
    • 可以查看selectImports()方法的内容;
    • List configurations = getCandidateConfigurations(annotationMetadata, attributes);获取候选的配置
  • 可以在在项目的External Libraries中下的spring.factories文件中查看配置。

    例如找到其中以下的:

    org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,\

   解读配置文件

@Configuration //表示这是一个配置类,以前编写的配置文件一样,也可以给容器中添加组件
@EnableConfigurationProperties(HttpEncodingProperties.class) //启动指定类的
ConfigurationProperties功能;将配置文件中对应的值和HttpEncodingProperties绑定起来;并把
HttpEncodingProperties加入到ioc容器中
@ConditionalOnWebApplication //Spring底层@Conditional注解(Spring注解版),根据不同的条件,如果
满足指定的条件,整个配置类里面的配置就会生效; 判断当前应用是否是web应用,如果是,当前配置类生效
@ConditionalOnClass(CharacterEncodingFilter.class) //判断当前项目有没有这个类
CharacterEncodingFilter;SpringMVC中进行乱码解决的过滤器;
@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing =
true) //判断配置文件中是否存在某个配置 spring.http.encoding.enabled;如果不存在,判断也是成立的
//即使我们配置文件中不配置pring.http.encoding.enabled=true,也是默认生效的;
public class HttpEncodingAutoConfiguration {
//他已经和SpringBoot的配置文件映射了
private final HttpEncodingProperties properties;
//只有一个有参构造器的情况下,参数的值就会从容器中拿
public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) {
this.properties = properties;
}
@Bean //给容器中添加一个组件,这个组件的某些值需要从properties中获取
@ConditionalOnMissingBean(CharacterEncodingFilter.class) //判断容器没有这个组件?
public CharacterEncodingFilter characterEncodingFilter() {
CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
filter.setEncoding(this.properties.getCharset().name());
filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
return filter;
}

Spring boot整合springMVC

学习链接:https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#boot-features-spring-mvc

springMVC的自动解管理

  • 中央转发器
  • 控制器
  • 视图解析器
  • 静态资源访问
  • 消息转换器
  • 格式化
  • 静态资源管理

中央转发器:

  xml无需配置:

 <servlet>
<servlet-name>chapter2</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup></load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>chapter2</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

  中央转发器被springboot自动接管,不在需要我们在xml文件配置,而且现在的项目也不是web项目,也不存在xml的文件配置。

org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,\

控制器:

  控制器Controller在springboot的注解扫描范围内自动管理

视图解析器的管理:

  Inclusion of ContentNegotiatingViewResolver and BeanNameViewResolver beans.

    ContentNegotiatingViewResolver:组合所有的视图解析器的;

  使用以前的方式是需要在配置文件中添加配置,现在就不需要配置文件,以前的配置方式:

 <bean id="de" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value="*.jsp"></property>
</bean>

  在源码:

public ContentNegotiatingViewResolver viewResolver(BeanFactory beanFactory) {
ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver();
resolver.setContentNegotiationManager((ContentNegotiationManager)beanFactory.getBean(ContentNegotiationManager.class));
resolver.setOrder(-);
return resolver;
}

  当我们做文件上传的时候我们也会发现multipartResolver是自动被配置好的

  例如在页面上

<form action="/upload" method="post" enctype="multipart/form-data">
<input name="pic" type="file">
<input type="submit">
</form>

  Controller中

 @ResponseBody
@RequestMapping("/upload")
public String upload(@RequestParam("pic")MultipartFile file, HttpServletRequest request){
String contentType = file.getContentType();
String fileName = file.getOriginalFilename();
/*System.out.println("fileName-->" + fileName);
System.out.println("getContentType-->" + contentType);*/
//String filePath = request.getSession().getServletContext().getRealPath("imgupload/");
String filePath = "D:/imgup";
try {
this.uploadFile(file.getBytes(), filePath, fileName);
} catch (Exception e) {
// TODO: handle exception
} return "success";
} public static void uploadFile(byte[] file, String filePath, String fileName) throws Exception {
File targetFile = new File(filePath);
if(!targetFile.exists()){
targetFile.mkdirs();
}
FileOutputStream out = new FileOutputStream(filePath+fileName);
out.write(file);
out.flush();
out.close();
}

  其中上传的文件的大小可以通过配置文件的方式配置

 application.properties, 默认限制是10MB,我们可以任意修改

  

消息转换和格式化

  Springboot自动配置了消息转换器

  

  格式化转换器的自动注册

  

  时间类型我们可以在这里修改

  

  在配置文件中指定好时间的模式我们就可以输入了

  

springboot扩展springmvc

  其实springboot并非是完全自动化的,很多跟业务相关的仍然需要我们自己扩展,springboot给我们提供了接口。

  我们可以通过实现WebMvcConfigurer的接口来扩展。

 public interface WebMvcConfigurer {
default void configurePathMatch(PathMatchConfigurer configurer) {
} default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
} default void configureAsyncSupport(AsyncSupportConfigurer configurer) {
} default void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
} default void addFormatters(FormatterRegistry registry) {
} default void addInterceptors(InterceptorRegistry registry) {
} default void addResourceHandlers(ResourceHandlerRegistry registry) {
} default void addCorsMappings(CorsRegistry registry) {
} default void addViewControllers(ViewControllerRegistry registry) {
} default void configureViewResolvers(ViewResolverRegistry registry) {
} default void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
} default void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {
} default void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
} default void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
} default void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
} default void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
} @Nullable
default Validator getValidator() {
return null;
} @Nullable
default MessageCodesResolver getMessageCodesResolver() {
return null;
}
}

  例如在容器中住注册视图控制器:

  需求:创建一个MyMVCCofnig实现WebMvcConfigurer接口,实现一下addViewControllers方法,我们完成通过/tx访问,转发到success.html的工作

 @Configuration
public class MyMVCCofnig implements WebMvcConfigurer{ @Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/tx").setViewName("success");
}

Springboot的数据层开发:

数据源自动管理:

  引入jdbc的依赖和springboot的应用场景

 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>

  使用yaml的方式配置,配置如下:

 spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/boot_demo
driver-class-name: com.mysql.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource

我们可以自己指定数据源配置,通过type来选取使用哪种数据源

# type: org.apache.commons.dbcp2.BasicDataSource

配置druid的数据源

  引入druid的依赖

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.</version>
</dependency>
修改   spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

  在application.yaml中加入

 spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/boot_demo
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
initialSize:
minIdle:
maxActive:
maxWait:
timeBetweenEvictionRunsMillis:
minEvictableIdleTimeMillis:
validationQuery: SELECT FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize:
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=

  创建数据源注册类

@Configuration
public class DruidConfig { @ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource dataSource(){
return new DruidDataSource();
}
}

  配置druid运行期监控

@Configuration
public class DruidConfig { @ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource dataSource(){
return new DruidDataSource();
} @Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),
"/druid/*");
Map<String,String> initParams = new HashMap<>();
initParams.put("loginUsername","root");
initParams.put("loginPassword","root");
initParams.put("allow","");//默认就是允许所有访问
initParams.put("deny","192.168.15.21");
bean.setInitParameters(initParams);
return bean;
} //2、配置一个web监控的filter
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean bean;
bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
Map<String,String> initParams = new HashMap<>();
initParams.put("exclusions","*.js,*.css,/druid/*");
bean.setInitParameters(initParams);
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}

  打开监控页面

 http://localhost:8080/druid

springboot整合jdbctemplate

   创建一个新的项目,同时引入开发的坐标依赖

     <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.</version>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.</version>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency> </dependencies>

在resource的目录下新建一个application.yaml文件,存入你要链接的数据库可相应的配置

 spring:
datasource:
username: root
password: zhanghao22333
url: jdbc:mysql://localhost:3306/boot_demo(注意使用的数据库)
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
initialSize:
minIdle:
maxActive:
maxWait:
timeBetweenEvictionRunsMillis:
minEvictableIdleTimeMillis:
validationQuery: SELECT FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize:
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=
mvc:
date-format: yyyy-MM-dd

 可以在Spring-boot-autoconfiguration下的spring:factory中的:

org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\

查看它的源码

@Configuration(
proxyBeanMethods = false
)
@ConditionalOnClass({DataSource.class, JdbcTemplate.class})
@ConditionalOnSingleCandidate(DataSource.class)
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
@EnableConfigurationProperties({JdbcProperties.class})
@Import({JdbcTemplateConfiguration.class, NamedParameterJdbcTemplateConfiguration.class})
public class JdbcTemplateAutoConfiguration {
public JdbcTemplateAutoConfiguration() {
}
}

解析:在注解  JdbcTemplateConfiguration.class进去可以看出对jdbcTemplate做的封装,并注意它的主注解@Bean存放到容器中

@ConditionalOnMissingBean({JdbcOperations.class})
class JdbcTemplateConfiguration {
JdbcTemplateConfiguration() {
} @Bean
@Primary
JdbcTemplate jdbcTemplate(DataSource dataSource, JdbcProperties properties) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
Template template = properties.getTemplate();
jdbcTemplate.setFetchSize(template.getFetchSize());
jdbcTemplate.setMaxRows(template.getMaxRows());
if (template.getQueryTimeout() != null) {
jdbcTemplate.setQueryTimeout((int)template.getQueryTimeout().getSeconds());
} return jdbcTemplate;
}
}

最后在测试使用jdbctemplate查询数据库的操作,在测试中编写

 package zh.stu.springboot.test;

 import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.junit4.SpringRunner; import java.util.List;
import java.util.Map; @RunWith(SpringRunner.class)
@SpringBootTest
class TestApplicationTests { @Autowired
JdbcTemplate jdbcTemplate;
@Test
public void contextLoads() {
System.out.println();
List<Map<String, Object>> maps = jdbcTemplate.queryForList("select * from tx_person");
System.out.println(maps); } }

最终在控制台输出数据库中的数据

[{pid=, username=张浩, password=, gender=, p_addr=杭州1, birth=--, pname=}, {pid=, username=jj, password=jj, gender=, p_addr=jj, birth=--, pname=jj}]

springboot整合mybatis

导入开发的坐标

 <dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.</version>
</dependency>

新建一个实体类,提供get和set的方法

package zh.stu.springboot.test.model;

import java.util.Date;

public class TxPerson {

    private int pid;
private String username;
private String password;
private String pAddr;
private String pname;
private int gender;
private Date birth; public int getPid() {
return pid;
} public void setPid(int pid) {
this.pid = pid;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getpAddr() {
return pAddr;
} public void setpAddr(String pAddr) {
this.pAddr = pAddr;
} public String getPname() {
return pname;
} public void setPname(String pname) {
this.pname = pname;
} public int getGender() {
return gender;
} public void setGender(int gender) {
this.gender = gender;
} public Date getBirth() {
return birth;
} public void setBirth(Date birth) {
this.birth = birth;
} @Override
public String toString() {
return "TxPerson{" +
"pid=" + pid +
", username='" + username + '\'' +
", password='" + password + '\'' +
", pAddr='" + pAddr + '\'' +
", pname='" + pname + '\'' +
", gender=" + gender +
", birth=" + birth +
'}';
}
}

然后新建一个mapper接口

 package zh.stu.springboot.test.mapper;

 import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
import zh.stu.springboot.test.model.TxPerson; import java.util.List; /**
* @Mapper:可以给mapper借口自动生成一个实现类,让Spring对mapper接口的bean进行管理,并且可以省略复杂的xml文件的配置
*/
@Mapper
public interface TxPersonMapper {
@Select("select * from tx_person")
public List<TxPerson> selectPersons(); /**
* @Options(useGeneratedKeys = true, keyProperty = "pid")
* 数据库表中的pid是自动增长的,使用@Opetions的注解
* @param p
*/
@Options(useGeneratedKeys = true, keyProperty = "pid")
@Insert("insert into tx_person(pid, username ,password,pname, p_addr, gender, birth)" +
"values(#{pid},#{username},#{password},#{pname},#{pAddr},#{gender},#{birth})")
public void insert(TxPerson p); }

注意:我在数据库中表tx_person的表中的字段p_add的形式存在(中间有一个下划线),而我在生成实体类的时候是:pAddr的形式,所以要添加一个类,将字段更改为驼峰的形式

 package zh.stu.springboot.test;

 import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* 将数据库中的字段下划线更改为大写的方式例如p_add>>pAdd
*/
@Configuration
public class MyBatisConfig { @Bean
public ConfigurationCustomizer getCustomizer(){
return new ConfigurationCustomizer() {
@Override
public void customize(org.apache.ibatis.session.Configuration configuration) {
configuration.setMapUnderscoreToCamelCase(true);
}
};
} }

最后在测试中测试

注入mapper

    @Autowired
TxPersonMapper txPersonMapper;

在方法中对Txperson对象操作

 // 查询
List<TxPerson> txPeople = txPersonMapper.selectPersons();
System.out.println(txPeople);
//新增
TxPerson txPerson=new TxPerson();
txPerson.setBirth(new Date());
txPerson.setGender();
txPerson.setpAddr("洛杉矶");
txPerson.setPassword("");
txPerson.setPname("");
txPerson.setUsername("");
txPersonMapper.insert(txPerson);

  

Spring Boot学习笔记二的更多相关文章

  1. Spring Boot学习笔记(二二) - 与Mybatis集成

    Mybatis集成 Spring Boot中的JPA部分默认是使用的hibernate,而如果想使用Mybatis的话就需要自己做一些配置.使用方式有两种,第一种是Mybatis官方提供的 mybat ...

  2. spring boot 学习笔记(二) 构建web支持jsp

    一.必须将项目打包成war包 <packaging>war</packaging> 二.pom.xml加入依赖包 <dependency> <groupId& ...

  3. Spring Boot学习笔记(二)全局捕获异常处理

    非常简单只需要创建自己的异常处理类,加上两个注解,就可以了

  4. Spring Boot 学习笔记(六) 整合 RESTful 参数传递

    Spring Boot 学习笔记 源码地址 Spring Boot 学习笔记(一) hello world Spring Boot 学习笔记(二) 整合 log4j2 Spring Boot 学习笔记 ...

  5. Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客

    ==他的博客应该不错,没有细看 Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客 http://blog.csdn.net/u012706811/article/det ...

  6. Spring Boot学习笔记2——基本使用之最佳实践[z]

    前言 在上一篇文章Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用已经对Spring Boot的基本体系与基本使用进行了学习,本文主要目的是更加进一步的来说明对于Spring B ...

  7. 我的第一个spring boot程序(spring boot 学习笔记之二)

    第一个spring boot程序 写在前面:鉴于spring注解以及springMVC的配置有大量细节和知识点,在学习理解之后,我们将直接进入spring boot的学习,在后续学习中用到注解及其他相 ...

  8. spring boot 学习笔记(二)之打包

    一.叙述 spring boot 在 pom 中可以配置成  packaging 为 jar ,这样打包出来的就是一个 jar 包,可以通过 Java 命令直接运行, Java 命令为: java - ...

  9. spring boot学习笔记(二)创建spring boot项目

    用eclipse(需要用高版本,要不然弄不出来):new →Spring Sarter Project 用IDEA:一般默认 一般默认 入门级的先 剩下的一般默认... 一.项目至少有下面的东西,里面 ...

随机推荐

  1. shell script 学习

    终于来到了shell脚本的学习,貌似很牛叉. shell script鸟叔解释:利用shell的功能写的一个program,使用纯文本文件,将一些shell语法和指令写在里面,搭配正则表示法,管线命令 ...

  2. Gym 101981K bfs

    思路:暴力让所有的骆驼和第一只骆驼合并,比如现在是第k只骆驼和第一只合并,广搜找出第k只骆驼如果想和第一只骆驼合并需要走哪一步,然后走一步,并更新所有骆驼的位置. 代码: #include <b ...

  3. cmake 加入调试信息

    1 首先在CMakeLists.txt中加入 SET(CMAKE_BUILD_TYPE "Debug")1在下面加入: SET(CMAKE_CXX_FLAGS_DEBUG &quo ...

  4. java反射技术主要实现类有哪些,作用分别是什么

    Java反射技术主要实现类有哪些,作用分别是什么? 在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中 1)Class类:代表一个类 2)Field 类 ...

  5. 2、Python 接口框架

    common:存放通用的工具类 config:存放配置文件信息 result:存放result.html run_suite.py:最后执行的文件 1.excel_util:利用 openpyxl 进 ...

  6. js过滤字符串中的html标签

    var str = 'add<a>daad</a><p>fsdada</p>' str.replace(/<[^<>]+>/g, ...

  7. Delphi 滚动条的使用

    DELPHI的滚动条默认发送消息格式: function TControl.Perform( Msg: Cardinal; WParam: WPARAM; LParam: LPARAM): LRESU ...

  8. Vue学习笔记【24】——Vue组件(组件切换)

    使用flag标识符结合v-if和v-else切换组件 页面结构:(缺点:只适用于两个组件间切换,不适合多个)  <div id="app">    <input ...

  9. 函数计算工具链新成员 —— Fun Local 发布啦

    刚刚,我们发布了函数计算工具链的新成员,Fun Local.欢迎大家使用! 如果你还不了解 Fun 是什么,我们来简单解释下. Fun 是什么 Fun 是 have Fun with Serverle ...

  10. Luogu P2042 [NOI2005]维护数列

    题目描述 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线' _ '表示实际输入文件中的空格) 输入输出格式 输入格式: 输入文件的第 1 行包含两个数 N 和 M, ...