1.SpringbootApplication 扫描当前包和同级包
2.springboot整合log4j。
(1)建立log4j.prperties文件,
(2)导入依赖
<dependency>
<groupId> org.springframework.boot </groupId>
<artifacrId> spring-boot-stater-log4j </artifacrId>
<version>1.3.8.RELEASE</version>
</dependency>
3.lombok的引用
添加插件 , idea不需要 eclipse需要
导入依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
效果:
import lombok.Data;
@Data
public class User {
private Integer id;
private String name;
private Integer age;
}
pojo类中不需要写set和get方法
而且采用@Slf4j注解,就可以直接调用log.info方法打印日志
3.运行
可以在mapper上面加一个注解@Mapper 或者在application上面加@MapperScan(basePackages=“com.itmayiedu.mapper”) 就可以完成对所有包的注解
-----====
mapper文件的差异,以前是采用的mapper接口,然后在一个mapper.xml文件里面完成对接口方法的实现(数据库的操作)
现在只需要一个mapper.class的接口:
public interface UserMapper {
@Select("select * from test where name=#{name}")
User findByName(@Param("name")String name);
@Insert("insert into test(name,age) values(#{name},#{age})")
int insert(@Param("name")String name,@Param("age")Integer age);
}
在方法的上面采用注解的方式,直接完成对数据库的操作。
@transactional注解 ,直接加在service中的类的方法上面,能够实现数据回滚,避免出现错误的添加信息。
4.多数据源
一个项目多少个数据源:无限个,根据内存大小
一个项目多数据源如何划分:分包名(业务) 或者是注解的方式:在mapper方法前面加入@Datasource(ref=“***”)
properties文件里面的区别: 其中一个数据源
spring.datasource.test1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test1.jdbc-url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&useAffectedRows=true&serverTimezone=GMT%2B8&useAffectedRows=true
spring.datasource.test1.username=root
spring.datasource.test1.password=12345
另一个数据源只需要将test1修改成test2
多数据源需要文件来读取 ,下面给出其中一个例子:
package com.itmayiedu.config;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@Configuration
@MapperScan(basePackages="com.itmayiedu.test02",sqlSessionFactoryRef="test1SqlSessionFactory")
public class DataSourceConfig {
@Bean(name="test1DataSource")
@ConfigurationProperties(prefix="spring.datasource.test1")
@Primary //这个注解制定默认的数据源,在springboot2.0之后就可以不用添加了,下面的也是
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name="test1SqlSessionFactory")
@Primary
public SqlSessionFactory testSessionFactoryBean(@Qualifier("test1DataSource")DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
//bean.setMapperLocations(new
//PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test1/*.xml") );
//注释的这一行是读取mapper文件的,由于本次测试没有mapper文件 所以注释掉
return bean.getObject();
}
@Bean(name="test1TransactionManager")
@Primary
public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource")DataSource dataSource) throws Exception{
return new DataSourceTransactionManager(dataSource);
}
@Bean(name="test1SqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(
@Qualifier("test1SqlSessionFactory")SqlSessionFactory sqlSessionFactory
)throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
在service中的方法上面添加@Transaction直接的时候,应该制定数据源管理器:@Transaction(transactionManager=“test2TransactionManager”)
5.整个mybatis分页插件pagehelper
(1)导入依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-stater</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
(2)service层的代码书写
public List<User>findUserList(int page,int pagesize){
PageHelper.startPage(page,pagesize);
List<User> listUser = userMapper.findUserList();
PageInfo<User>pageInfoUserList = new PageInfo<User>(listUser);
return pageInfoUserList;
}
-----在查询层的上面写上分页的页数和大小,在查询出的下面写入返回值类型。
6. springboot调优
(1)扫包范围。要知道mapper的包,而不是所有的包
(2)JVM调优。
内部调优:
在启动的时候选择run configuration,然后在第二个选项里面,加入堆内存大小,-xx:PrintGCDetails -Xmx1024M -Xms1024M
解释:打印详细GC日志,最大堆内存为1024M ,初始堆内存为1024M,默认为4G
外部调优:
7.springboot jar 打包方式
(1)打开cmd窗口,进入到进入项目目录
(2)输入命令mvn package 或者mvn clean package
(3)打包之后,继续输入java -jar +(可以直接将上一步打包的文件拖到cmd窗口里面,完成对文件的定位)
(4)如果执行第三步的时候出现了没有主清单属性,解决方式如下:
8.监控中心
(1)SpringbootActuator
(2)Springboot-aiminUi
作用:可以监控含有多少个bean标签,还可以检测有多少个接口
9.java代码启动Tomcat
public class Test001 {
private static int PORT = 8080;
private static String Contex_Path = "/itmayiedu";
private static String SERVLET_NAME = "/indexServlet";
public static void main(String[] args) throws LifecycleException {
//创建Tomcat服务器
Tomcat tomcatserver = new Tomcat();
//设置端口号
tomcatserver.setPort(PORT);
//是否设置自动部署
tomcatserver.getHost().setAutoDeploy(false);
//创建上下文
StandardContext standardContext = new StandardContext();
standardContext.setPath(Contex_Path);
//监听上下文
standardContext.addLifecycleListener(new Tomcat.FixContextListener());
//Tomcat容器添加上下文
tomcatserver.getHost().addChild(standardContext);
//创建servlet
tomcatserver.addServlet(Contex_Path,SERVLET_NAME,new IndexServlet());
//添加servleturl映射
standardContext.addServletMapping("/index",SERVLET_NAME);
// standardContext.addServletMappingDecoded("/index",SERVLET_NAME);
tomcatserver.start();
System.out.print("启动成功");
//异步进行接收请求
tomcatserver.getServer().await();
}