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();
        }
    }
    

Mybatis

输出log:

logging:
  level:
    co.zhanglintc.ohMySpringBoot.mapper: debug

# Or

mybatis:
 configuration:
   log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

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
Write a Comment