Я настраиваю стартер Springboot, код вступает в силу в версии 1.5.20, но не работает после 2.0 (я тестировал на версии 2.0.9 、 2.1.1 и 2.1.4).
В чем разница между v1.xx и v2.xx стартера?
Что нужно сделать, чтобы исправить это в версии 2.xx?
Iсоздал два проекта Maven и проект Spring Starter. Проекты выглядят следующим образом:
первый проект с именем «share», он выступает в качестве стороннего банка.
второй проект под названием «share-spring-boot-starter», это зависит от jar «share».
третий проект с именем «springboot-demo», он действует как веб-проект, зависит от jar "share-spring-boot-starter".
ПРИМЕЧАНИЕ. Jar первого проекта и второго проекта строится командой mvn clean install
, и установите jar в локальный репозиторий maven с помощью mvn install:install-file -Dfile=xxx ...
.
Код о проекте "share":
ShareDemo.java
package com.example;
import com.alibaba.fastjson.JSONObject;
public class ShareDemo {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String doSomeThing() {
return this.toString();
}
@Override
public String toString() {
return JSONObject.toJSONString(this);
}
}
pom.xml
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>share</artifactId>
<version>1.2.1</version>
<packaging>jar</packaging>
<name>share</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.57</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Код о "share-spring-boot-starter "project:
ShareAutoConfiguration.java
package com.example.springboot.autoconfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.example.ShareDemo;
@Configuration
@EnableConfigurationProperties(ShareProperties.class)
public class ShareAutoConfiguration {
@Bean
public ShareDemo getShare(ShareProperties properties) {
ShareDemo shareDemo = new ShareDemo();
shareDemo.setName(properties.getName());
shareDemo.setAge(properties.getAge());
return shareDemo;
}
}
ShareProperties.java
package com.example.springboot.autoconfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "com.study")
public class ShareProperties {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String doSomeThing() {
return this.toString();
}
@Override
public String toString() {
return "从配置中读取到结果:【name=" + name + ",age=" + age + "】";
}
}
spring.factories
#Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.springboot.autoconfiguration.ShareAutoConfiguration
pom.xml
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>share-spring-boot-starter</artifactId>
<version>1.1.0</version>
<packaging>jar</packaging>
<name>share-spring-boot-starter</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<springboot.version>1.5.20.RELEASE</springboot.version>
</properties>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>share</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${springboot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>${springboot.version}</version>
</dependency>
<!-- 生成配置元数据 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>${springboot.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.57</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Код о проекте "springboot-demo":
UserController.java
package com.example.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.ShareDemo;
/**
* @author zero
*
*/
@RestController
public class UserController {
@Autowired
ShareDemo shareDemo;
@RequestMapping("/share")
public String doSomeThing() {
return shareDemo.doSomeThing();
}
}
application.properties
com.study.name=kitty
com.study.age=26
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.20.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>springboot-demo</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<name>springboot-demo</name>
<description>Springboot Project</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>share-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Весь код этих проектов можно найти здесь: https://github.com/biaotang/custom-spring-boot-starter
Я хочу запустить этот код в версии 2.xx ,, ноэто не работает и опроисходит ошибка компиляции в проекте «springboot-demo»
@Autowired
ShareDemo shareDemo; // can't be resovle the type