| | |
| | | * Hello world! |
| | | */ |
| | | |
| | | import com.java110.core.client.RestTemplate; |
| | | import com.java110.utils.constant.ResponseConstant; |
| | | import com.java110.utils.exception.StartException; |
| | | import com.java110.utils.factory.ApplicationContextFactory; |
| | |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.boot.SpringApplication; |
| | | import org.springframework.boot.autoconfigure.SpringBootApplication; |
| | | import org.springframework.boot.web.client.RestTemplateBuilder; |
| | | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; |
| | | import org.springframework.cloud.client.loadbalancer.LoadBalanced; |
| | | import org.springframework.cloud.openfeign.EnableFeignClients; |
| | | import org.springframework.context.ApplicationContext; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.http.converter.StringHttpMessageConverter; |
| | | |
| | | import java.net.InetAddress; |
| | | import java.net.UnknownHostException; |
| | | import java.nio.charset.Charset; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | "com.java110.config.properties.code", "com.java110.db"}) |
| | | //@SpringBootApplication(scanBasePackages = {"com.java110.service","com.java110.code","com.java110.config.properties.code"}) |
| | | @EnableDiscoveryClient |
| | | @EnableFeignClients(basePackages = {"com.java110.core.smo"}) |
| | | @EnableFeignClients(basePackages = {"com.java110.intf"}) |
| | | public class CodeServiceApplicationStart { |
| | | protected final static Logger logger = LoggerFactory.getLogger(CodeServiceApplicationStart.class); |
| | | |
| | | |
| | | /** |
| | | * 实例化RestTemplate,通过@LoadBalanced注解开启均衡负载能力. |
| | | * |
| | | * @return restTemplate |
| | | */ |
| | | @Bean |
| | | @LoadBalanced |
| | | public RestTemplate restTemplate() { |
| | | StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8")); |
| | | RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build(RestTemplate.class); |
| | | return restTemplate; |
| | | } |
| | | |
| | | /** |
| | | * 实例化RestTemplate |
| | | * |
| | | * @return restTemplate |
| | | */ |
| | | @Bean |
| | | public RestTemplate outRestTemplate() { |
| | | StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8")); |
| | | RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build(RestTemplate.class); |
| | | return restTemplate; |
| | | } |
| | | |
| | | public static void main(String[] args) throws Exception { |
| | | |
| | |
| | | |
| | | ServiceStartInit.initSystemConfig(context); |
| | | |
| | | //加载workId |
| | | loadWorkId(); |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 加载 workId |
| | | */ |
| | | public static void loadWorkId() throws StartException { |
| | | ZookeeperProperties zookeeperProperties = ApplicationContextFactory.getBean("zookeeperProperties", ZookeeperProperties.class); |
| | | |
| | | if (zookeeperProperties == null) { |
| | | throw new StartException(ResponseConstant.RESULT_CODE_ERROR, "系统启动失败,未加载zookeeper 配置信息"); |
| | | } |
| | | |
| | | String host = null; |
| | | try { |
| | | host = InetAddress.getLocalHost().getHostAddress(); |
| | | } catch (UnknownHostException e) { |
| | | throw new StartException(ResponseConstant.RESULT_CODE_ERROR, "系统启动失败,获取host失败" + e); |
| | | } |
| | | |
| | | ServiceInfoListener serviceInfoListener = ApplicationContextFactory.getBean("serviceInfoListener", ServiceInfoListener.class); |
| | | |
| | | if (serviceInfoListener == null) { |
| | | throw new StartException(ResponseConstant.RESULT_CODE_ERROR, "系统启动失败,获取服务监听端口失败"); |
| | | } |
| | | |
| | | serviceInfoListener.setServiceHost(host); |
| | | |
| | | try { |
| | | ZooKeeper zooKeeper = new ZooKeeper(zookeeperProperties.getZookeeperConnectString(), zookeeperProperties.getTimeOut(), new Watcher() { |
| | | |
| | | @Override |
| | | public void process(WatchedEvent watchedEvent) { |
| | | |
| | | } |
| | | }); |
| | | |
| | | |
| | | Stat stat = zooKeeper.exists(zookeeperProperties.getWorkDir(), true); |
| | | |
| | | if (stat == null) { |
| | | zooKeeper.create(zookeeperProperties.getWorkDir(), "".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, |
| | | CreateMode.PERSISTENT); |
| | | } |
| | | String workDir = ""; |
| | | List<String> workDirs = zooKeeper.getChildren(zookeeperProperties.getWorkDir(), true); |
| | | |
| | | if (workDirs != null && workDirs.size() > 0) { |
| | | for (String workDirTemp : workDirs) { |
| | | if (workDirTemp.startsWith(serviceInfoListener.getHostPort())) { |
| | | workDir = workDirTemp; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | if (StringUtil.isNullOrNone(workDir)) { |
| | | workDir = zooKeeper.create(zookeeperProperties.getWorkDir() + "/" + serviceInfoListener.getHostPort(), "".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, |
| | | CreateMode.PERSISTENT_SEQUENTIAL); |
| | | } |
| | | |
| | | String[] pathTokens = workDir.split("/"); |
| | | if (pathTokens.length > 0 |
| | | && pathTokens[pathTokens.length - 1].contains("-") |
| | | && pathTokens[pathTokens.length - 1].contains(":")) { |
| | | String workId = pathTokens[pathTokens.length - 1].substring(pathTokens[pathTokens.length - 1].indexOf("-") + 1); |
| | | serviceInfoListener.setWorkId(Long.parseLong(workId)); |
| | | } |
| | | |
| | | Assert.hasLength(serviceInfoListener.getWorkId() + "", "系统中加载workId 失败"); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | throw new StartException(ResponseConstant.RESULT_CODE_ERROR, "系统启动失败,链接zookeeper失败" + zookeeperProperties.getZookeeperConnectString()); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | } |