Initializer
# 官方
https://start.spring.io
# 阿里云
https://start.aliyun.com
JAR / WAR
-
如果希望使用 jar 启动的话,即类似
java -jar ohMySpringBoot.jar
的方式启动(微服务推荐方式),则 pom 中如下配置:<packaging>jar</packaging> <dependency> <!-- jar模式下此包可以不要 --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>compile</scope> </dependency>
-
如果希望使用 war 的方式启动,则如下配置:
<packaging>war</packaging> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <!-- 为了IDEA里可以调试,此处可以设为默认的compile --> <!-- 不过部署的时候似乎可能与外部的tomcat冲突 --> <!-- 如果冲突可以改为provided --> <scope>compile</scope> </dependency>
数据库
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
@SpringBootTest
class OhMySpringBootApplicationTests {
@Autowired
DataSource dataSource;
@Test
void contextLoads() throws SQLException {
Connection conn = dataSource.getConnection();
System.out.println(conn);
conn.close();
}
}
@RestController
public class IndexController {
@Autowired
JdbcTemplate jdbcTemplate;
@RequestMapping("/")
public Object index() {
String sql = "select * from Student";
Object object = jdbcTemplate.queryForList(sql);
return object;
}
}
打 jar 包
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.2</version>
<configuration>
<archive>
<manifest>
<mainClass>co.zhanglintc.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>co.zhanglintc.ohMySpringBoot.OhMySpringBootApplication</mainClass>
<skip>false</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
排错
webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)
<properties> <failOnMissingWebXml>false</failOnMissingWebXml> </properties> <!-- Or --> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.0.0</version> </plugin>
- 打包完成的 jar 包过小,导致无法直接启动
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <configuration> <mainClass>co.zhanglintc.ohMySpringBoot.OhMySpringBootApplication</mainClass> <!-- 检查此处,不能为true,否则此插件被跳过了 --> <skip>false</skip> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
Spring 基础
- 声明 bean
// 通用注解,下记不适用时使用 @Component // 用于 Dao 层 @Repository // 用于 Service 层 @Service // 用于 Controller 层 @Controller
- 简单类型赋值
@Value
- 引用类型赋值
// 由 Spring 提供, 默认赋值方式为 byType @Autowired // Autowired 需要赋值方式为 byName 时配合使用 @Qualifier // 由 jdk 提供,默认赋值方式为 byName // 如果 byName 失败会自动尝试 byType // 高于 jdk 1.8 需要添加依赖 javax-annotaion-api // (那么看起来还是用 Autowired 比较科学) @Resource
- @Component / @Bean
// 直接作用于类 @Component public class Student { private String name = "lkm"; public String getName() { return name; } public void setName(String name) { this.name = name; } }
// 作用于方法,用于把方法返回的对象注入。没有源码时非常实用。 // // @Configuration 相当于 <beans></beans> // @Bean 相当于 <bean></bean> @Configuration public class WebSocketConfig { @Bean public Student student(){ return new Student(); } }
激活 profiles 的方式
# 命令行方式是一种外部配置的方式,在执行java -jar命令时可以通过 --spring.profiles.active=test的方式进行激活指定的profiles
java -jar order.0.0.1-SNAPSHOT.jar --spring.profiles.active=dev > logs.info 2>&1 &
# Java系统属性方式也是一种外部配置的方式,在执行java -jar命令时可以通过-Dspring.profiles.active=test 的方式进行激活指定的profiles
# 注意:-D方式设置Java系统属性要在-jar前定义
java -Dspring.profiles.active=dev -jar order.0.0.1-SNAPSHOT.jar > logs.info 2>&1 &
# 编辑环境变量配置文件/etc/profile,添加名为 SPRING_PROFILES_ACTIVE 的环境变量
export SPRING_PROFILES_ACTIVE=dev
# 配置文件方式是最常用的方式,不过灵活性不强,局限性比较大,不建议使用这种方式来激活配置文件,我们只需要在application.yml配置文件添加配置即可
spring:
profiles:
active: dev
# 命令行方式 > Java系统属性方式 > 系统变量方式 > 配置文件方式
Mybatis
输出log:
mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# Or
logging:
level:
co.zhanglintc.ohMySpringBoot.mapper: debug
Misc
// 输出:
// file:/D:/_Git_for_me/IDEA/ohMyApp/target/classes/
//
// 相当于 `ohMyApp/src/main/resources/` 目录
// 也对应 `ohMyApp/target/classes/` 目录
System.out.println(App.class.getClassLoader().getResource(""));
// 输出:
// file:/D:/_Git_for_me/IDEA/ohMyApp/target/classes/co/zhanglintc/
System.out.println(App.class.getResource(""));
Comments