Dubbo + ZooKeeper 入门快速开发练习详解

}

public void setAge(Integer age) {

this.age = age;

}

}

4. 创建接口子模块

此模块,主要存放业务接口的定义,它是服务消费者模块和服务提供者模块的公共依赖模块

<?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”>

dubbo_parent

com.lichun

1.0-SNAPSHOT

4.0.0

dubbo_interface

jar

com.lichun

dubbo_common

1.0-SNAPSHOT

UserService.java

package com.lichun.service;

import com.lichun.pojo.User;

public interface UserService {

User findById(Integer id);

}

5. 创建服务提供者模块

只要能启动spring的容器(加载spring的配置文件)就可以启动项目,因此有三种启动项目方式:

  • ClassPathXmlApplication

  • 监听器

  • DispatcherServlet

注册中心验证:

在这里插入图片描述

注意:

  • 消费者与提供者应用名称不能相同

  • 如果有多个服务提供者,名称不能相同,通信端口也不能相同

  • 只有服务提供者才会配置服务发布的协议,默认是dubbo协议,端口号是20880

<dubbo:protocol name=“dubbo” port=“20881”></dubbo:protocol>

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">

dubbo_parent

com.lichun

1.0-SNAPSHOT

4.0.0

dubbo_provider

war

com.lichun

dubbo_interface

1.0-SNAPSHOT

org.springframework

spring-webmvc

com.alibaba

dubbo

org.apache.zookeeper

zookeeper

org.apache.curator

curator-framework

org.apache.curator

curator-recipes

org.mybatis

mybatis

org.mybatis

mybatis-spring

com.alibaba

druid

mysql

mysql-connector-java

org.springframework

spring-tx

org.springframework

spring-jdbc

org.slf4j

slf4j-log4j12

UserDao.java

package com.lichun.dao;

import com.lichun.pojo.User;

import org.apache.ibatis.annotations.Select;

public interface UserDao {

@Select(“select * from t_user where id = #{id}”)

User findById(Integer id);

}

UserServiceImpl.java

package com.lichun.service.impl;

import com.lichun.dao.UserDao;

import com.lichun.pojo.User;

import com.lichun.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

public class UserServiceImpl implements UserService {

@Autowired

UserDao userDao;

@Override

public User findById(Integer id) {

User user = userDao.findById(id);

return user;

}

}

MyApplicationContext.java

package com.lichun;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

public class MyApplicationContext {

public static void main(String[] args) throws IOException {

new ClassPathXmlApplicationContext(“classpath:spring-provider.xml”);

System.in.read();

}

}

log4j.properties

direct log messages to stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.err

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

set log levels - for more verbose logging change ‘info’ to ‘debug’

log4j.rootLogger=debug, stdout

spring-dao.xml

  • 配置数据源

  • 配置sqlSessionFactory对象

  • 扫描dao包,创建dao接口的动态代理对象

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd">

spring-service.xml

  • 配置事务(事务管理器,注解事务)
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:tx=“http://www.springframework.org/schema/tx”

xsi:schemaLocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd”>

<tx:annotation-driven transaction-manager=“txManager”/>

spring-provider.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:dubbo=“http://dubbo.apache.org/schema/dubbo”

xsi:schemaLocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd”>

<dubbo:application name=“dubbo_provider”/>

<dubbo:registry address=“zookeeper://127.0.0.1:2181”/>

<dubbo:service interface=“com.lichun.service.UserService” ref=“userService”/>

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xmlns=“http://java.sun.com/xml/ns/javaee”

xsi:schemaLocation=“http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”

version=“2.5”>

contextConfigLocation

classpath:spring-provider.xml

org.springframework.web.context.ContextLoaderListener

6. 创建服务消费者模块

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”>

dubbo_parent

com.lichun

1.0-SNAPSHOT

4.0.0

dubbo_consumer

war

com.lichun

dubbo_interface

1.0-SNAPSHOT

org.springframework

spring-webmvc

com.fasterxml.jackson.core

jackson-core

2.9.0

com.fasterxml.jackson.core

jackson-databind

2.9.0

com.fasterxml.jackson.core

jackson-annotations

2.9.0

javax.servlet

servlet-api

2.5

provided

com.alibaba

dubbo

org.apache.zookeeper

zookeeper

org.apache.curator

curator-framework

org.apache.curator

curator-recipes

org.slf4j

slf4j-log4j12

UserController.java

package com.lichun.controller;

import com.lichun.pojo.User;

import com.lichun.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

@RequestMapping(“/user”)

public class UserController {

@Autowired

private UserService userService;

@RequestMapping(“/findById”)

public User findById(Integer id) {

// springmvc默认使用jaskson来解析java对象为json字符串,注意引入jaskson的依赖

return userService.findById(id);

}

}

log4j.properties

direct log messages to stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.err

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

set log levels - for more verbose logging change ‘info’ to ‘debug’

log4j.rootLogger=debug, stdout

spring-consumer.java

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xmlns:context=“http://www.springframework.org/schema/context” xmlns:dubbo=“http://dubbo.apache.org/schema/dubbo”

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

<dubbo:application name=“dubbo_consumer”/>

<dubbo:registry address=“zookeeper://127.0.0.1:2181”/>

<dubbo:reference interface=“com.lichun.service.UserService” id=“userService”/>

<dubbo:consumer check=“false” timeout=“2000” retries=“2”/>

spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xmlns:context=“http://www.springframework.org/schema/context”

xmlns:mvc=“http://www.springframework.org/schema/mvc”

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

<context:component-scan base-package=“com.lichun.controller”/>

mvc:annotation-driven/

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xmlns=“http://java.sun.com/xml/ns/javaee”

xsi:schemaLocation=“http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”

version=“2.5”>

dispatcherServlet
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)

总结

蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。


经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

蚂蚁金服5面,总结了49个面试题,遇到的面试官都是P7级别以上

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
dispatcherServlet
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-Cuzx3LE3-1713826102968)]

[外链图片转存中…(img-5lifFWU4-1713826102969)]

[外链图片转存中…(img-6Xdv6LNA-1713826102969)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)

[外链图片转存中…(img-b2omWpAv-1713826102969)]

总结

蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。


经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

[外链图片转存中…(img-l6ejRn3r-1713826102969)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值