java微服务下找不到符号解决方案

项目场景:

这个问题其实遇到很多次,之前都是mavan下重新install就好了,但是这个install的时候就报某个实体类,不存在,或者导入不进去。

问题描述:

这次的问题是我在微服务下导入用户模块的实体类,但是打包一直提示符号不存在。而有的时候却可以运行。而打包却不存在,后面再运行下就运行失败了。而项目里也是可以直接点进去。原有的bug截图不在了,从网上找了类似的截图来讲解。类似于如下那两张。

在这里插入图片描述
在这里插入图片描述


原因分析:

  • 因为项目有的时候可以运行,而且可以直接点进去,发现是可以存在的,而打包提示符号不存在,那么可以证明问题基本是在maven上。但是我重新install却发现不是缓存之类的问题,那么可以再想想maven install到底是什么部分?所以我想到是不是因为我使用微服务的原因。
  • 既然确定了是maven且微服务的原因后,那么问题排查点就很简单了,很容易想到未找到服务的实体类是模块间的依赖,说明在模块打包的时候没有把模块打包进来。

解决方案:

进行原因分析后,解决方案就很简单了,在需要被打包的实体类所在的模块pom文件下加入以下配置:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <classifier>execute</classifier>
                </configuration>
                <executions>
                    <execution>
                        <phase>none</phase>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
</build>

我是依赖一个ucenter的用户模块,则只需要再ucenter的用户模块内加入以上配置就行。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
A:搭建一个微服务Java实现方法有很多种,这里提供一种常见的方式,使用Spring Boot和Spring Cloud来实现。 1. 创建Spring Boot项目 使用Spring Initializr创建一个基础的Spring Boot项目,选择Web和Spring Cloud Discovery作为依赖。我们这里选择使用Maven构建。 2. 添加依赖 编辑pom.xml文件,添加需要的依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <version>2.2.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.2.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> <version>2.2.3.RELEASE</version> </dependency> ``` 这些依赖分别是: - spring-cloud-starter-netflix-eureka-server:用于构建服务注册中心 - spring-cloud-starter-netflix-eureka-client:用于注册服务到服务注册中心 - spring-cloud-starter-config:用于从配置中心获取应用配置信息 3. 配置服务注册中心 在应用的配置文件 application.properties 或 application.yml 中添加以下内容: ```yaml spring.application.name=your-app-name server.port=8080 eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ eureka.instance.prefer-ip-address=true ``` 其中: - your-app-name:该应用在服务注册中心中的名称,用于标识该应用 - server.port:当前应用的端口号 - eureka.client.service-url.defaultZone:服务注册中心的地址,这里使用的是本地地址 - eureka.instance.prefer-ip-address:因为在Docker等环境下,容器的hostname可能会重名。因此最好使用IP地址注册到注册中心。 4. 配置服务提供者 在项目的启动类上添加@EnableEurekaClient注解,将该应用注册到服务注册中心。 ```java @SpringBootApplication @EnableEurekaClient public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } ``` 同时,在应用配置文件中添加以下内容: ```yaml spring: application: name: your-service-name server: port: 8081 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ instance: instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}} ``` 其中: - your-service-name:该服务在服务注册中心中的名称 - eureka.client.service-url.defaultZone:同上 - eureka.instance.instance-id:实例ID,该值会传递给服务注册中心,并用于标识服务的唯一性。 5. 配置服务消费者 方式一: 使用Spring提供的RestTemplate对象调用服务,需要注意的是,在使用 RestTemplate 发起实际请求时需要提供服务提供者的名称,而不是直接使用IP地址 ```java @Service public class YourService { @Autowired private RestTemplate restTemplate; public String callService() { return restTemplate.getForObject("http://your-service-name/api/your-endpoint", String.class); } } @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } ``` 其中: - your-service-name:服务提供者在服务注册中心中的名称 - @LoadBalanced:表示RestTemplate需要进行负载均衡 方式二: 使用Spring Cloud提供的Feign客户端调用服务,需要注意的是,在使用Feign发起实际请求时也需要提供服务提供者的名称。 1. 添加依赖,编辑pom.xml文件,添加需要的依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>2.2.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.2.3.RELEASE</version> </dependency> ``` 这些依赖分别是: - spring-cloud-starter-eureka:用于注册到服务注册中心。 - spring-cloud-starter-openfeign:用于构建 Feign 客户端。 2. 创建 Feign 客户端 创建一个 Feign 接口类,使用@FeignClient注解指定服务提供者的名称。 ```java @FeignClient(name = "your-service-name") public interface YourServiceClient { @GetMapping("/api/your-endpoint") String yourMethod(); } ``` 3. 注入 Feign 客户端,使用注入的客户端调用接口 ```java @Service public class YourService { @Autowired private YourServiceClient client; public String callService() { return client.yourMethod(); } } ``` 详细的步骤和示例可以查看Spring官网的指南。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幸平xp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值