Spring Boot学习笔记

来源:互联网 发布:倍福plc编程语言 编辑:程序博客网 时间:2024/06/04 19:25

上一篇Maven学习笔记里完成了对maven的初步认识与环境配置后,接着探索Maven+Spring Boot搭建Web项目环境。

以下备忘录主要记录,在探索springboot使用方法的过程中遇到的重要问题。

  • 零 环境搭建
    • 创建项目
    • 填写项目信息
    • 完善pom及applicationproperties
  • 一 关于注解
  • 二 pom依赖的相关问题
  • 三 路径问题
  • 四 mybatis及mysql配置
    • 添加spring boot的mysql支持到pom文件
    • 添加spring boot的mybatis支持到pom
    • 添加数据库信息
    • 添加数据库操作的映射

零、 环境搭建

以eclipse为例:

1. 创建项目

导航栏空白处右键-〉new-〉maven project,勾选”create a simple project”,如下图:

这里写图片描述

2. 填写项目信息

红线处必填,完成后点击Finish。

这里写图片描述

3. 完善pom及application.properties

至此,项目结构如下图:

这里写图片描述

附上pom.xml内容以及application.properties内容:

POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.ray</groupId>    <artifactId>test</artifactId>    <packaging>war</packaging>    <version>0.0.1-SNAPSHOT</version>    <name>sboot Maven Webapp</name>    <url>http://maven.apache.org</url>    <properties>    </properties>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.8.RELEASE</version>    </parent>    <dependencies>        <!-- junit支持 -->        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <scope>test</scope>        </dependency>        <!-- springboot的junit依赖注入支持 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <!-- web支持 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <!-- jdbc支持 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-jdbc</artifactId>        </dependency>        <!-- tomcat支持 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-tomcat</artifactId>            <scope>provided</scope>        </dependency>        <!-- mysql支持 -->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency>        <!-- jsp支持  -->        <dependency>            <groupId>org.apache.tomcat.embed</groupId>            <scope>provided</scope>        </dependency>        <!-- jstl标签库 -->        <dependency>            <groupId>javax.servlet</groupId>            <artifactId>jstl</artifactId>        </dependency>        <!-- mybatis支持 -->        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>1.1.1</version>        </dependency>    </dependencies>    <build>        <finalName>sboot</finalName>        <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <configuration>                    <source>1.8</source><!-- 使用1.8版本的jdk编译 -->                    <target>1.8</target>                    <encoding>utf-8</encoding><!--编码使用UTF8-->                </configuration>            </plugin>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

application.properties

server.port=9090server.address=127.0.0.1server.session.timeout=10server.tomcat.uri-encoding=UTF-8spring.datasource.url=jdbc:mysql://127.0.0.1:3306/lisanyspring.datasource.username=rootspring.datasource.password=123456

一、 关于注解

@Service用于标注业务层组件

@Controller用于标注控制层组件(如struts中的action)

@Repository用于标注数据访问组件,即DAO组件

@Component泛指组件。
这是网上对于这几个最常用的组件注解的解释,其实最关键的在于下面这种书写格式:

@Service(“UserService”)

这种书写格式使得此类的实例得以在spring框架里使用byName原则注册。

当spring框架遇到下面这种注解标注的字段时,就会使用依赖注入原则进行注入,不必写setter也可以:

@Resource(name="UserService")private UserService us;

这种手动指定注入关系的用法又引伸出了“自动装配”的概念。

也就是不手动命名组件,需要注入的地方使用@Autowired注解。如下两图之间的关系:

这里写图片描述

这里写图片描述

spring boot会根据名字和类型自动完成注入操作。但是,需要特别特别注意的一点是,有些组件需要显式指示springboot去扫描才会被加载,如图2中的mybatis数据库映射组件。指示方法是@MapperScan(“被扫描的包路径”),如下图:

这里写图片描述

另外,图1中的注解@RequestMapping(“/user”),@RequestMapping(“/login”),是映射了对于“/user”,“/login”命名空间的http请求。
举例来说,对于客户端发起的对于”http://IP/user/login/“的请求,首先会交给负责”/user”请求的UserService来处理,spring找到UserService的实例后,发现负责处理”/user/login”请求的是doLogin方法,最后交给doLogin来处理。

二、 pom依赖的相关问题

项目报错,无法识别HttpServletRequest等类,需要在POM中手动添加servlet如下依赖:

     <dependency>        <groupId>javax.servlet</groupId>        <artifactId>jstl</artifactId>    </dependency>

springboot对于junit单元测试的支持是spring-boot-starter-test,而不是spring-test,groupId是org.springframework.boot,而不是org.springframework。
单元测试支持添加如下依赖到POM文件中:

     <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-test</artifactId>        <scope>test</scope>    </dependency>

对于1.4以后的版本,junit单元测试类名前增加两个注解(如下),即可实现SpringBoot依赖注入。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Main.class)//Main是Springboot程序的启动类

@SpringBootTest注解的使用这个问题,折磨我很久,我用1.5版本的spring boot,网上的很多资料都是过时API,主要是英文水平不行惹的祸。

单元测试类截图:

这里写图片描述

三、 路径问题

这个问题比较棘手,因为不太方便通过调试手段解决,但还是解决了。需要在此特别记录一下。

项目结构如下图:

这里写图片描述

在spring boot的配置文件中指定jsp目录:

这里写图片描述

controller中返回页面名字后,jsp页面是可以访问的(需要添加POM的web支持)。如下图:

这里写图片描述

但是!CSS样式表,js,图片等静态资源文件,按照传统的路径存放方式,也就是说

在spring boot创建的web程序中,静态资源和JSP同级目录下存放,在JSP中使用相对路径进行访问,是访问不到的!

会出现光秃秃的页面,察看页面源码发现所有链接的静态资源都是404找不到!

正解:
方案一:spring boot默认静态资源路径在以下地址:

src/main/resources
|—-/static
|—-/public
|—-/resources
|—-/META-INF/resources

静态资源存放在以上目录,相当于普通web项目的WEB-INF目录下,可以使用相对路径访问静态资源。如下图:

这里写图片描述

当然还有以下方案,但是还没试:

方案2、通过application.properties配置spring.resources.static-locations=classpath:/img/ 指定自定义静态文件的目录位置,,多个使用逗号分隔,springboot自动失效

方案3、创建StaticController类继承WebMvcConfigurerAdapter 重写addResourceHandlers 指定静态访问资源目录

这里写图片描述

参考资料:

http://www.jb51.net/article/118326.htm

四、 mybatis及mysql配置

参考如下:

http://blog.csdn.net/gebitan505/article/details/54929287

实际操作:

1. 添加spring boot的mysql支持到pom文件

        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency>

2. 添加spring boot的mybatis支持到pom

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

3. 添加数据库信息

添加数据库信息及mybatis用到的数据库表实体类所在包的路径。到spring boot的application.properties配置文件(我用properties比较习惯,也可以是yaml文件)。

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/lisanyspring.datasource.username=rootspring.datasource.password=123456

这里写图片描述

4. 添加数据库操作的映射

数据库操作的mapper,其中property指的是java实体类中字段的名字,column指的是该字段在数据库中对应的表的列名,javaType指的是该列的数据类型对应java语言中的什么数据类型,如下图:

这里写图片描述

至此,基本配置就完成了,可以使用run as Spring Boot App运行web程序了。

总结:遇到的主要问题大致都在这里了。想起来再补充吧。

原创粉丝点击