精选列表

搜索[SpringCloud],共1270篇文章
优秀的个人博客,低调大师

SpringCloud Finchley 实战入门(基于springBoot 2.0.3)【八 config 微服务配置中心】

spring cloud config spring cloud config是spring cloud团队创建的一个全新的项目,用来为分布式系统中的基础设施和微服务应用提供集中化的配置支持。他分为服务端和客户端两部分。其中服务端也称为分布式式配置中心,它是一个独立的微服务应用,用来连接配置仓库的并为客户端提供获取配置信息,加密、解密等访问接口。而客户端则是微服务架构中的各个微服务应用和基础设施。 入门实例 这里我们会创建一个基于Git存储的分布式配置中心,并且在客户端演示如何通过配置指定的微服务应用所属的配置中心,以及让其能够通过配置中心获取配置信息并绑定到代码中。 说先我们在github上面先创建一个配置文件存储的仓库"config-repo",创建完成后新建spring_cloud_in_action/config-repo的目录。 在config-repo目录下面新建"didispace.properties"、 "didispace-dev.properties"、"didispace-prod.properties"、"didispace-test.properties"; 然后在这4个文件中均设置一个from属性,并且为每个配置文件设置不同的值: from=git-default-2.0 from=git-dev-2.0 from=git-prod-2.0 from=git-test-2.0 1532672579949.png 对应对应github上面的目录: 1532672654269.png 到这里,我们配置文件的仓库就已经配置好了。我们继续回到spring cloud的项目中; 建一个spring boot的module,并且命名为"";创建的过程中,我们选择eureka-server和config的组件依赖。 1532672208369.png 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> <groupId>com.example</groupId> <artifactId>eureka-config-git</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>eureka-config-git</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> application.yml配置: spring: application: name: config-server-git cloud: config: server: git: uri: https://github.com/ChinPangLung/config-repo #git仓库的地址;file://${user.name}/config-repo这是本地文件路径配置的方式,只限于用于开发使用 searchPaths: spring_cloud_in_action/config-repo username: XXXXXXX #这里对应仓库地址的账号密码 password: XXXXXXX discovery: enabled: true server: port: 7001 eureka: client: serviceUrl: defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka/ spring.cloud.config.server.git.uri 表示我们上面再GitHub上创建的config-repo仓库地址 spring.cloud.config.server.git.searchPaths 表示配置文件存放查询的地址 spring.cloud.config.server.git.username 表示我们的github的账号 (大家修改成自己对应的账号密码就行了) spring.cloud.config.server.git.password 表示我们github的密码 项目的主类添加@EnableConfigServer注解 @SpringBootApplication @EnableConfigServer public class EurekaConfigGitApplication { public static void main(String[] args) { SpringApplication.run(EurekaConfigGitApplication.class, args); } } 到这里我们的配置服务中心就已经基本的搭建完成,在eureka注册中心,启动的情况下,我们运行该项目,如果没有报错,那就说明我们的配置是没有问题的。 完成了这些准备工作之后,我们就可以通过浏览器、POSTMAN或CURL等工具直接来访问到我们的配置内容了。访问配置信息的URL与配置文件的映射关系如下: /{application}/{profile}[/{label}] /{application}-{profile}.yml /{label}/{application}-{profile}.yml /{application}-{profile}.properties /{label}/{application}-{profile}.properties 上面的url会映射{application}-{profile}.properties对应的配置文件,其中{label}对应Git上不同的分支,默认为master。我们可以尝试构造不同的url来访问不同的配置内容,比如,要访问master分支,didisapce应用的dev环境,就可以访问这个url:http://localhost:7001/didispace/dev/master 可以得到以下的返回: 1532674051553.png 完成了上述的验证后,我们就可以创建一个客户端来映射服务配置中心的配置了。 创建一个spring boot的module,命名为"eureka-config-client" 1532674210897.png <?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> <groupId>com.example</groupId> <artifactId>eureka-config-client</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>eureka-config-client</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> application.yml配置: spring: application: name: config-client server: port: 7002 创建一个"bootstrap.yml"文件,配置如下: spring: cloud: config: profile: dev #dev开发环境配置文件,test测试环境配置文件,pro正式环境文件 label: master #git仓库对应的分支名称 config-label-test # uri: http://localhost:7001/ #config-server name: didispace discovery: serviceId: config-server-git #基于服务注册发现的方式查找 enabled: true eureka: client: serviceUrl: defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka/ #注册中心eureka.client.service-url.defaultZone = 一定要放在boostrap文件中,不然启动会报错 在项目的中类中写一个from接口: @SpringBootApplication @RestController @RefreshScope public class EurekaConfigClientApplication { public static void main(String[] args) { SpringApplication.run(EurekaConfigClientApplication.class, args); } @Value("${from}") private String from; @RequestMapping(value = "from") public String getFrom() { return this.from; } } 启动项目,然后访问http://localhost:7002/from可以得到以下的返回: 1532674897020.png 这个数据就是config-client项目获取服务配置中心里对应指向的GitHub仓库配置文件的值。 而且我们观察"eureka-config-git"项目控制台的输出 1532675044524.png 我们可以知道,服务配置中心在获取GitHub上面的配置文件返回config-client时,同时会缓存一分数据在本地的。这样就算因为其他的问题导致配置服务中心获取不到GitHub仓库的数据时,config-client也能有缓存的数据返回。 这样我们就完成了分布式配置中心的搭建了。其实上面的config-client我们在实际的开发中,就是相当于一个具体的微服务实例应用了。 github 项目源码 下面一篇我们将搭建spring cloud bus 服务总线。

优秀的个人博客,低调大师

springCloud Finchley 实战入门(基于springBoot 2.0.3)【七 Fegin 声明式服务调用】

Fegin 介绍 spring cloud fegin ,他是基于Netflix Fegin实现得,整合了spring cloud Ribbon和spring cloud Hystrix,除了整合这两者得功能外,他还提供了了一种声明式得Web服务客户端定义方式。 快速入门 创建一个spring boot项目命名为"eureka-bussniss-service-user-client-fegin",选择server和fegin的依赖; 1532587428278.png application.yml相关配置: spring: application: name: service-user-client-fegin server: port: 9001 eureka: client: serviceUrl: defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka/ feign: hystrix: enabled: true 项目主类EurekaBussnissServiceUserClientFeginApplication,添加@EnableEurekaClient和@EnableFeignClients注解 @SpringBootApplication @EnableEurekaClient @EnableFeignClients public class EurekaBussnissServiceUserClientFeginApplication { public static void main(String[] args) { SpringApplication.run(EurekaBussnissServiceUserClientFeginApplication.class, args); } } 我们以eureka-bussniss-service-user的服务例。在fegin项目中定义一个接口"UserFeignClient" /** * 标明feign调用的微服务名称 */ //通过@ FeignClient(“服务名”),来指定调用哪个服务。 // 比如在代码中调用了service-hi服务的“/hi”接口,还可以使用url参数指定一个URL // fallback 出现错误回调类 @FeignClient(name = "service-user",fallback = UserFallback.class) public interface UserFeignClient { /** * 对应service-user微服务中的URL * @return */ @GetMapping("/listUsers") String listUsers(); } 接着,创建一个Controller来实现对Fegin客户端的调用,使用@Autowired自动注入上面的“UserFeignClient ”实例。并且通过方法实现对service-user的服务发起调用。 @RestController public class UserFeignApi { /** * 将刚才定义的userFeignClient注入,并当成普通的接口调用即可 */ @Autowired private UserFeignClient userFeignClient; @GetMapping("/listUsersByFeign") public String ListUsers(){ String users = this.userFeignClient.listUsers(); return users; } } 方式测试fegin的负载均衡以及服务容错保护的功能,我们创建了一个UserFallback实现UserFeignClient。实现接口请求错误的反馈 @Component public class UserFallback implements UserFeignClient { @Override public String listUsers() { return "服务调用失败"; } } 包路径截图 1532588267196.png 到这里就已经基本完成了,依次启动service-user(8802,8803两个端口)、fegin。 1532588691914.png 访问fegin项目的地址http://localhost:9001/listUsersByFeign 1532588711363.png 1532588720488.png 重复请求,会发现接口数据是依次返回8802和8803的数据的。 现在把其中一个service-user服务停掉(8803),一开始当请求负载到8803这个服务实例时,因为当前的服务已经停掉了,所以接口响应显示了我们实现了UserFallback 类的返回。 1532588846177.png 再过几秒钟后,我们继续请求会发现,接口已经全部负载到了8802的服务实例了。 1532588992210.png 所以可以看到fegin已经实现了Ribbon和Hystrix的功能了。 github 项目源码 下一篇我们将实现spring cloud config分布式配置中心的组件。

优秀的个人博客,低调大师

springCloud Finchley 实战入门(基于springBoot 2.0.3)【五 Hystrix 服务容错保护】

服务容错保护 在微服务的架构中,存在着那么多单元服务,若一个单元出现故障,就很容易因依赖关系二引发故障的蔓延,最终导致整个系统的瘫痪。这样的架构相比较传统的架构更加不稳定。为了解决这个问题,产生了断路器等一系列的服务保护机制。 spring Cloud Hystrix实现了断路器、线程隔离等一系列服务保护功能。它也是基于Netflix的开源框架Hystrix实现的。,该框架的目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延时和故障提供更加强大的容错能力。 快速入门 我们以之前的内容作为基础,针对"service-user-ribbon"进行配置。 在"service-user-ribbon"的pom.xml配置文件添加Hystrix依赖 <!--添加Hystrix依赖 断路器容错保护--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> 完整的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> <groupId>com.example</groupId> <artifactId>eureka-bussniss-service-user-client-ribbon</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>eureka-bussniss-service-user-client-ribbon</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> <!--添加Hystrix依赖 断路器容错保护--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 然后在主类EurekaBussnissServiceUserClientRibbonApplication中使用@EnableHystrix 注解以开启 Hystrix 特性 @SpringBootApplication @EnableEurekaClient @EnableHystrix public class EurekaBussnissServiceUserClientRibbonApplication { public static void main(String[] args) { SpringApplication.run(EurekaBussnissServiceUserClientRibbonApplication.class, args); } @Bean @LoadBalanced //开启客户端负载均衡 RestTemplate restTemplate() { return new RestTemplate(); } } 接下来修改服务消费方式,在UserManagementRibbonClient类的接口方法:ListUsersByRibbon增加@HystrixCommand并且指定fallbackMethod名,再实现该方法。具体的代码如下: /** * 使用 @HystrixCommand 注解的 fallbackMethod 指定失败方法,并实现该方法 * * @return */ @GetMapping("/listUsersByRibbon") @HystrixCommand(fallbackMethod = "listUsersByRibbonFallback") public String ListUsersByRibbon() { /** * hystrix 断路器的默认的超时时间为2000毫秒 * 这里测试的在3000毫秒的随机出现的超时概率出发断路器 对应的代码逻辑见service-user项目的listUsers接口 */ long start = System.currentTimeMillis(); String result = this.restTemplate.getForObject("http://service-user/listUsers", String.class); long end = System.currentTimeMillis(); log.info("Spend Time :"+(end-start)); return result; } public String listUsersByRibbonFallback() { return "listUsersByRibbon异常,端口:" + port; } 配置完成重启项目,在8802和8803服务正常的情况下服务调用正常。 当我们把其中一个service-user服务停掉。例如:把8802停掉,只剩下8803服务,我们重新访问http://localhost:8901/listUsersByRibbon地址,当我们一开始访问到8802服务时,因为此时服务已经挂了,所以我们会看到下面的响应: 1532500404150.png 过了几秒后,继续访问我们会发现请求总是负载到了8803的端口了,不会再去请求8802 1532500486184.png 接下来我们重新把8802的服务启动后,继续访问http://localhost:8901/listUsersByRibbon这时我们会发现请求接口又被一轮询的方式负载到8802和8803了 1532500622445.png 1532500630124.png 这样我们就实现了基础的分布式微服务的容错保护了。github 项目源码 接下来我们会再研究一下,Hystrix框架针对单个应用实例和集群提供的监控功能。

优秀的个人博客,低调大师

每天学点SpringCloud(七):路由器和过滤器-Zuul

版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/81055026 为什么要使用Zuul 先来看一下下方这个图 假如现在我们具有四个微服务,分别是用户、订单、支付、催收微服务,它们的调用方式分别是使用http、restful、thrift、kafka。这个时候如果我们在客户端直接调用的话感觉是不是太费劲了,客户端需要维护这几种调用方式的客户端,如果后期新增微服务或者减少或者更换调用方式等,都需要修改客户端。那么我们来看一下加入Zuul以后是什么样子的呢 Zuul呢就负责了所有的调用,解耦了客户端和微服务。也符合我们设计的单一职责原则。 使用Zuul 首先呢,我们在原先的父项目下新增一个cloud-demo-zuul模块,引入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> 创建包cn.org.zhixiang,在此包下新建启动类CloudDemoZuulApplication @SpringBootApplication @EnableZuulProxy public class CloudDemoZuulApplication { public static void main(String[] args) { SpringApplication.run(CloudDemoZuulApplication.class, args); } } @EnableZuulProxy public class CloudDemoZuulApplication { public static void main(String[] args) { SpringApplication.run(CloudDemoZuulApplication.class, args); } } @EnableZuulProxy就是开启Zuul的注解 接下来看一下application.yml spring: application: name: zuul-demo server: port: 8093 eureka: client: register-with-eureka: true service-url: defaultZone: http://root:root@localhost:8761/eureka application: name: zuul-demo server: port: 8093 eureka: client: register-with-eureka: true service-url: defaultZone: http://root:root@localhost:8761/eureka 这个配置其实是跟我们以往的服务消费者的配置是一样的,为什么要这样配置呢,因为在这个之前我们需要先复习一下以往的知识点,没有看过以往博客的小伙伴可以先参考这个:https://zhixiang.org.cn 首先启动我们的Eureka服务,然后启动一个提供者cloud-demo-provider。我们知道这个时候我们直接访问http://localhost:8078/user/getUser/2是可以获得数据的对吧,那么我的Zuul是怎么使用的呢。我们启动一下我们的Zuul。 这个时候我们访问http://localhost:8093/provider-demo/user/getUser/2获得的数据是一样的,也就是说我们的Zuul做了一个路由转发。我们可以看到这个url中有一个provider-demo,这个呢是提供者的spring.application.name的值,那么如果我们不想使用这个呢,比如说现在我知道这是user微服务,我就想如果访问user微服务我就使用http://localhost:8093/user/user/getUser/2怎么办呢。 配置 我们需要在yml中加上一个配置。 zuul: routes: provider-demo: /user/** routes: provider-demo: /user/** 这个配置呢就是把服务id为provider-demo的微服务项目地址映射为/user/**.注意最后是两个*,为什么是两个呢,如果是一个*只能匹配/user/a,/user/b这种路径,而匹配不了/user/a/b这种。而我们配两个*的话不仅可以匹配/user/a/b,还能匹配/user/a/b/c/d等。 这个时候我们访问http://localhost:8093/user/user/getUser/2的时候就可以得到数据了。 其实还有别的写法。我们来看一下 1. zuul: routes: demo: path: /user/** serviceId: provider-demo routes: demo: path: /user/** serviceId: provider-demo 2. zuul: routes: demo: path: /user/** url: http://localhost:8078/ routes: demo: path: /user/** url: http://localhost:8078/ 上方这两种方式都是可以的,那个demo呢其实是自定义的,只要不是重复就行。然后path呢就是网页上我们访问的url。这两种方式就是分别将这哥path映射到serviceId或者一个url。 负载均衡 刚才我们探讨的一直都是单个服务的情况,那么当我们有多个微服务的时候应该怎么操作呢 zuul: routes: demo: path: /user/** serviceId: provider-demo provider-demo: ribbon: listOfServers: http://localhost:8078,http://localhost:8079 routes: demo: path: /user/** serviceId: provider-demo provider-demo: ribbon: listOfServers: http://localhost:8078,http://localhost:8079 使用这种方式以后,我们再启动一下我们原先的cloud-demo-provider-2项目,然后启动Zuul访问时会发现已经实现了负载均衡 文件上传 我们使用zuul做路由的时候可能会碰到上传文件的需求,上传小文件到是没事,但是如果大文件的话是无法上传呢,这儿呢就有一个办法来绕过SpringMVC的DispatchServlet。 例如我们上传文件的接口为http://localhost:8093/user/user/uploadFile 那么我们在上传的时候就可以访问http://localhost:8093/zuul/user/user/uploadFile来实现上传大文件 GitHub:https://github.com/2388386839/spring-cloud-demo 码云:https://gitee.com/zhixiang_blog/spring-cloud-demo 如果对您有所帮助,请记得帮忙点一个star哦 本文出自https://zhixiang.org.cn,转载请保留。

优秀的个人博客,低调大师

SpringCloud微服务实战(六)-统一配置中心

1 统一配置中心概述 为什么需要统一配置中心 2 Config Server 直接运行报错,因为会从 git拉取配置文件 在 Git 建立新仓库存放配置文件 配置 Git 信息后,重启成功,无报错 访问配置文件yml 格式 properties格式 json格式 若故意将 yml 格式写错,则会报错 两种配置文件访问路径 /{name}-{profiles}.yml /{label}/{name}-{profiles}.properties] name 服务名 profiles 环境 label 分支( branch) 新建一个分支 修改下配置文件,以示区别 访问成功 git默认存放路径 亦可自定义路径 3 Config Client 在 order 添加 config-client 依赖 配置文件修改,删除多余信息

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。