全球快消息!自定义注解+AOPP 简化数据源的切换操作
项目中经常会出现需要同时连接两个数据源的情况,这里还是演示基于MyBatis来配置两个数据源,并演示如何切换不同的数据源。
(资料图片)
网上的一些例子都写的有点冗余,这里我通过自定义注解+AOP的方式,来简化这种数据源的切换操作。
maven依赖
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
UTF-8UTF-81.81.1.28.0.7-dmr2.1.81.0.5org.springframework.bootspring-boot-starter-aopmysqlmysql-connector-java${mysql-connector.version}runtimecom.alibabadruid${druid.version}com.baomidoumybatis-plus${mybatis-plus.version}com.baomidoumybatisplus-spring-boot-starter${mybatisplus-spring-boot-starter.version}org.springframework.bootspring-boot-starter-testtestorg.hamcresthamcrest-all1.3test
初始化数据库
这里我们需要创建两个数据库,初始化脚本如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
# -------------------------------------以下是pos业务库开始-------------------------------------------CREATE DATABASE IF NOT EXISTS pos default charset utf8 COLLATE utf8_general_ci;SET FOREIGN_KEY_CHECKS=0;USE pos;-- 后台管理用户表DROP TABLE IF EXISTS `t_user`;CREATE TABLE `t_user` ( `id` INT(11) PRIMARY KEY AUTO_INCREMENT COMMENT "主键ID", `username` VARCHAR(32) NOT NULL COMMENT "账号", `name` VARCHAR(16) DEFAULT "" COMMENT "名字", `password` VARCHAR(128) DEFAULT "" COMMENT "密码", `salt` VARCHAR(64) DEFAULT "" COMMENT "md5密码盐", `phone` VARCHAR(32) DEFAULT "" COMMENT "联系电话", `tips` VARCHAR(255) COMMENT "备注", `state` TINYINT(1) DEFAULT 1 COMMENT "状态 1:正常 2:禁用", `created_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT "创建时间", `updated_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "更新时间") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT="后台管理用户表";# 下面是pos数据库中的插入数据INSERT INTO `t_user` VALUES (1,"admin","系统管理员","123456","www", "17890908889", "系统管理员", 1, "2017-12-12 09:46:12", "2017-12-12 09:46:12");INSERT INTO `t_user` VALUES (2,"aix","张三","123456","eee", "17859569358", "", 1, "2017-12-12 09:46:12", "2017-12-12 09:46:12");# -------------------------------------以下biz业务库开始-------------------------------------------CREATE DATABASE IF NOT EXISTS pos default charset utf8 COLLATE utf8_general_ci;SET FOREIGN_KEY_CHECKS=0;USE biz;-- 后台管理用户表DROP TABLE IF EXISTS `t_user`;CREATE TABLE `t_user` ( `id` INT(11) PRIMARY KEY AUTO_INCREMENT COMMENT "主键ID", `username` VARCHAR(32) NOT NULL COMMENT "账号", `name` VARCHAR(16) DEFAULT "" COMMENT "名字", `password` VARCHAR(128) DEFAULT "" COMMENT "密码", `salt` VARCHAR(64) DEFAULT "" COMMENT "md5密码盐", `phone` VARCHAR(32) DEFAULT "" COMMENT "联系电话", `tips` VARCHAR(255) COMMENT "备注", `state` TINYINT(1) DEFAULT 1 COMMENT "状态 1:正常 2:禁用", `created_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT "创建时间", `updated_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "更新时间") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT="后台管理用户表";# 下面是biz数据库中的插入数据INSERT INTO `t_user` VALUES (1,"admin1","系统管理员","123456","www", "17890908889", "系统管理员", 1, "2017-12-12 09:46:12", "2017-12-12 09:46:12");INSERT INTO `t_user` VALUES (2,"aix1","张三","123456","eee", "17859569358", "", 1, "2017-12-12 09:46:12", "2017-12-12 09:46:12");
可以看到我创建了两个数据库pos和biz,同时还初始化了用户表,并分别插入两条初始数据。注意用户名数据不相同。
配置文件
接下来修改application.yml配置文件,如下:
1234567891011121314151617181920212223242526272829303132
################### 自定义配置 ###################xncoding: muti-datasource-open: true #是否开启多数据源(true/false)################### mybatis-plus配置 ###################mybatis-plus: mapper-locations: classpath*:com/xncoding/pos/common/dao/repository/mapping/*.xml typeAliasesPackage: > com.xncoding.pos.common.dao.entity global-config: id-type: 0 # 0:数据库ID自增 1:用户输入id 2:全局唯一id(IdWorker) 3:全局唯一ID(uuid) db-column-underline: false refresh-mapper: true configuration: map-underscore-to-camel-case: true cache-enabled: true #配置的缓存的全局开关 lazyLoadingEnabled: true #延时加载的开关 multipleResultSetsEnabled: true #开启的话,延时加载一个属性时会加载该对象全部属性,否则按需加载属性#默认数据源spring: datasource: url: jdbc:mysql://127.0.0.1:3306/pos?useSSL=false&autoReconnect=true&tinyInt1isBit=false&useUnicode=true&characterEncoding=utf8 username: root password: 123456#多数据源biz: datasource: url: jdbc:mysql://127.0.0.1:3306/biz?useSSL=false&autoReconnect=true&tinyInt1isBit=false&useUnicode=true&characterEncoding=utf8 username: root password: 123456
解释一下:
这里我添加了一个自定义配置项muti-datasource-open,用来控制是否开启多数据源支持。这个配置项后面我会用到。 接下来定义MyBatis的配置,最后定义了两个MySQL数据库的连接信息,一个是pos库,一个是biz库。
动态切换数据源
这里通过Spring的AOP技术实现数据源的动态切换。
多数据源的常量类:
1234
public interface DSEnum { String DATA_SOURCE_CORE = "dataSourceCore"; //核心数据源 String DATA_SOURCE_BIZ = "dataSourceBiz"; //其他业务的数据源}
datasource的上下文,用来存储当前线程的数据源类型:
1234567891011121314151617181920212223242526
public class DataSourceContextHolder { private static final ThreadLocalcontextHolder = new ThreadLocal(); /** * @param dataSourceType 数据库类型 * @Description: 设置数据源类型 */ public static void setDataSourceType(String dataSourceType) { contextHolder.set(dataSourceType); } /** * @Description: 获取数据源类型 */ public static String getDataSourceType() { return contextHolder.get(); } /** * @Description: 清除数据源类型 */ public static void clearDataSourceType() { contextHolder.remove(); }}
定义动态数据源,继承AbstractRoutingDataSource:
1234567
public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return DataSourceContextHolder.getDataSourceType(); }}
接下来自定义一个注解,用来在Service方法上面注解使用哪个数据源:
1234567891011
/** * 多数据源标识 * * @author xiongneng */@Inherited@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD})public @interface DataSource { String name() default "";}
最后,最核心的AOP类定义:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
/** * 多数据源切换的aop * * @author xiongneng */@Aspect@Component@ConditionalOnProperty(prefix = "xncoding", name = "muti-datasource-open", havingValue = "true")public class MultiSourceExAop implements Ordered { private Logger log = Logger.getLogger(this.getClass()); @Pointcut(value = "@annotation(com.xncoding.pos.common.annotion.DataSource)") private void cut() { } @Around("cut()") public Object around(ProceedingJoinPoint point) throws Throwable { Signature signature = point.getSignature(); MethodSignature methodSignature = null; if (!(signature instanceof MethodSignature)) { throw new IllegalArgumentException("该注解只能用于方法"); } methodSignature = (MethodSignature) signature; Object target = point.getTarget(); Method currentMethod = target.getClass().getMethod(methodSignature.getName(), methodSignature.getParameterTypes()); DataSource datasource = currentMethod.getAnnotation(DataSource.class); if (datasource != null) { DataSourceContextHolder.setDataSourceType(datasource.name()); log.debug("设置数据源为:" + datasource.name()); } else { DataSourceContextHolder.setDataSourceType(DSEnum.DATA_SOURCE_CORE); log.debug("设置数据源为:dataSourceCore"); } try { return point.proceed(); } finally { log.debug("清空数据源信息!"); DataSourceContextHolder.clearDataSourceType(); } } /** * aop的顺序要早于spring的事务 */ @Override public int getOrder() { return 1; }}
这里使用到了注解@ConditionalOnProperty,只有当我的配置文件中muti-datasource-open=true的时候注解才会生效。
另外还有一个要注意的地方,就是order,aop的顺序一定要早于spring的事务,这里我将它设置成1,后面你会看到我将spring事务顺序设置成2。
配置类
首先有两个属性类:
DruidProperties连接池的属性类MutiDataSourcePropertiesbiz数据源的属性类
然后定义配置类:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
@Configuration@EnableTransactionManagement(order = 2)@MapperScan(basePackages = {"com.xncoding.pos.common.dao.repository"})public class MybatisPlusConfig { @Autowired DruidProperties druidProperties; @Autowired MutiDataSourceProperties mutiDataSourceProperties; /** * 核心数据源 */ private DruidDataSource coreDataSource() { DruidDataSource dataSource = new DruidDataSource(); druidProperties.config(dataSource); return dataSource; } /** * 另一个数据源 */ private DruidDataSource bizDataSource() { DruidDataSource dataSource = new DruidDataSource(); druidProperties.config(dataSource); mutiDataSourceProperties.config(dataSource); return dataSource; } /** * 单数据源连接池配置 */ @Bean @ConditionalOnProperty(prefix = "xncoding", name = "muti-datasource-open", havingValue = "false") public DruidDataSource singleDatasource() { return coreDataSource(); } /** * 多数据源连接池配置 */ @Bean @ConditionalOnProperty(prefix = "xncoding", name = "muti-datasource-open", havingValue = "true") public DynamicDataSource mutiDataSource() { DruidDataSource coreDataSource = coreDataSource(); DruidDataSource bizDataSource = bizDataSource(); try { coreDataSource.init(); bizDataSource.init(); } catch (SQLException sql) { sql.printStackTrace(); } DynamicDataSource dynamicDataSource = new DynamicDataSource(); HashMaphashMap = new HashMap<>(); hashMap.put(DSEnum.DATA_SOURCE_CORE, coreDataSource); hashMap.put(DSEnum.DATA_SOURCE_BIZ, bizDataSource); dynamicDataSource.setTargetDataSources(hashMap); dynamicDataSource.setDefaultTargetDataSource(coreDataSource); return dynamicDataSource; }}
代码其实很好理解,我就不再多做解释了。
然后步骤跟普通的集成MyBatis是一样的,我简单的过一遍。
实体类
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
@TableName(value = "t_user")public class User extends Model{private static final long serialVersionUID = 1L; /** * 主键ID */ @TableId(value="id", type= IdType.AUTO) private Integer id; /** * 账号 */ private String username; /** * 名字 */ private String name; /** * 密码 */ private String password; /** * md5密码盐 */ private String salt; /** * 联系电话 */ private String phone; /** * 备注 */ private String tips; /** * 状态 1:正常 2:禁用 */ private Integer state; /** * 创建时间 */ private Date createdTime; /** * 更新时间 */ private Date updatedTime; // 省略getter/setter方法}
定义DAO
123
public interface UserMapper extends BaseMapper{}
定义Service
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
@Servicepublic class UserService { @Resource private UserMapper userMapper; /** * 通过ID查找用户 * @param id * @return */ public User findById(Integer id) { return userMapper.selectById(id); } /** * 通过ID查找用户 * @param id * @return */ @DataSource(name = DSEnum.DATA_SOURCE_BIZ) public User findById1(Integer id) { return userMapper.selectById(id); } /** * 新增用户 * @param user */ public void insertUser(User user) { userMapper.insert(user); } /** * 修改用户 * @param user */ public void updateUser(User user) { userMapper.updateById(user); } /** * 删除用户 * @param id */ public void deleteUser(Integer id) { userMapper.deleteById(id); }}
这里唯一要说明的就是我在方法findById1()上面增加了注解@DataSource(name = DSEnum.DATA_SOURCE_BIZ),这样这个方法就会访问biz数据库。
注意,不加注解就会访问默认数据库pos。
测试
最后编写一个简单的测试,我只测试findById()方法和findById1()方法,看它们是否访问的是不同的数据源。
12345678910111213141516171819202122
@RunWith(SpringRunner.class)@SpringBootTestpublic class ApplicationTests { private static final Logger log = LoggerFactory.getLogger(ApplicationTests.class); @Resource private UserService userService; /** * 测试增删改查 */ @Test public void test() { // 核心数据库中的用户id=1 User user = userService.findById(1); assertThat(user.getUsername(), is("admin")); // biz数据库中的用户id=1 User user1 = userService.findById1(1); assertThat(user1.getUsername(), is("admin1")); }}
运行测试,结果显示为green bar,成功!
标签:
相关推荐:
精彩放送:
- []天天百事通!房企融资去年年末翘尾,2023年万亿偿债压力何解?
- []43家公司已获A股“入场券” 计划募资419.97亿元
- []世界热点!“拿1/3居民存款买房”引热议,孟晓苏回应
- []【世界热闻】浙能电力:与浙能电力没有关系
- []楼市2022:供地凉热写趋势
- []环球实时:消息指赛百味正在研究出售公司事项 估值可能超100亿美元
- []天威视讯:公司正在建设深汕威视数据中心项目,目前尚未投产,具体情况可查阅公司2002年半年度报告
- []南瑞继保力助国内首个电网侧大容量构网型储能电站成功并网!
- []【焦点热闻】1.72万只私募基金 仅三成去年实现正收益
- []《非物质文化遗产旅游景区认定》公开征求意见
- []【全球时快讯】头部私募频频加仓 多位明星基金经理发声看多
- []当前资讯!联东U谷首个零探智能分布式储能电站成功投运
- []环球观察:浙江衢州开化县1宗商住地1.73亿挂牌 须建设指定房型住宅116套
- []天天消息!远兴能源:目前公司持有银根矿业60%股权,已纳入合并报表范围,按60%持股比例计算归属母公司净利润
- []【世界新视野】又有A股公司回馈股东!免费送益生菌固体饮料一盒 已有多公司披露相关计划!
- []锋物科技退出优尼科物业70%股份 后者经营范围包括酒店管理
- []世界观热点:最新龙虎榜:机构买入黑芝麻超4000万元,知名游资卖出桂发祥
- []标准股份:截至2023年1月10日,公司股东人数约为2.59万户
- []自然资源部:适当增加2023年土地计划指标分配
- []前中国首富李河君或被警方带走!
- []储能系统的构成主要包括哪几个方面?
- []有望爆炒,2023年潜在主线的能源建设龙头
- []世界资讯:一款口罩、三种标准(FFP2/KN95/N95)——uvex silv-Air c系列口罩
- []成立3年,百G海辰获不超80亿元授信融资!
- []每日报道:社保账户怎么开通
- []怎么查看医保里面的资金
- []美股异动 | 见知教育(JZ.US)涨超17% 市值升至1.21亿美元
- []社保怎样开通银行代扣
- []当前热议!政策加码护航供需两端 优质房企有望平稳发展
- []去年一二手房成交量创近年新低! 今年广州楼市主题仍是“去库存”
- []【世界时快讯】好医保怎么报销医药费
- []异地公积金怎么提取出来,到官方网站提取
- []环球视点!外地父母投靠成都入户需要子女有房产证吗?
- []天天热资讯!万物云:证监会已受理公司实施H股全流通的申请
- []每日资讯:近八成公司业绩预喜,茅台暂居净利润“一哥”,这些年报预增股涨疯了
- []【世界快播报】沃森生物:公司将严格按照深交所创业板相关规定,在满足条件时及时披露相关信息
- []差旅高管谈复苏:签证、护照申请周期延长,多国对中国旅客收紧限制
- []环球微速讯:蓝海华腾:1月10日公司高管时仁帅减持公司股份合计6.78万股
- []世界速递!绍兴出台公积金新政 上调贷款额度最高达100万
- []今热点:华谊兄弟:1月10日公司高管王忠磊减持公司股份合计171.16万股
- []世界短讯!昆船智能:截至2023年1月10日我公司股东总数为33025户
- []二手房周报 | 15城成交低位持稳,京深杭规模环比下降(01.02-01.08)
- []【环球聚看点】我爱我家拟为北京子公司8000万元债权额度提供担保
- []焦点速读:马蜂窝春节趋势预测:“疗愈度假”类目的地是家庭出游首选
- []无人机百人会隆重举行,复亚智能斩获双项大奖
- []全球快资讯丨北京2022年甲级写字楼新增供应同比下降76.2%
- []环球最资讯丨奥来德:1月10日公司高管王艳丽减持公司股份合计9000股
- []焦点信息:大唐集团拟为天誉置业子公司提供3.5亿一年期贷款 利率6%
- []环球热文:赛腾股份:1月10日杨伟减持公司股份合计2200股
- []天天热头条丨中梁控股2022年累计合约销售660.5亿 12月单月约40亿
- []天天简讯:伊戈尔:公司将会严格按照相关法律法规的要求履行信息披露义务
- []世界热推荐:种植牙集采开标 一颗牙的整体费用有望降低50%左右
- []每日速递:桂发祥:公司为国资控股上市公司,实际控制人为天津市河西区人民政府国有资产监督管理委员会
- []莱茵体育控股股东已减持1571万股股票 减持比例1.22%
- []世纪星源计划引入中霆股份作为深圳平湖旧改项目合作方
- []当前要闻:泰国酒店春节将再迎“中国热”,内地旅客酒店预订增长近12倍
- []最新快讯!大悦城控股第四季度新增西安一宗商住地 地价9.1亿拆迁费用10.19亿
- []【当前热闻】华阳集团:公司电子外后视镜产品已获得定点项目,正在开发中
- []新消息丨40亿抢下上海3宗地!起底民企拿地“黑马”佳运置业
- []环球滚动:保利发展2022年签约金额4573亿 12月拿地金额110.7亿
- []全球新消息丨朗诗绿色生活:关于收购北海朗润商管全部股权的通函将延迟寄发
- []振东制药:请关注公司后续在巨潮资讯网(www.cninfo.com.cn)上发布的业绩预告
- []润建股份:截止到1月10日,公司股东人数为14616户
- []快讯丨迪马股份:新增累计涉及诉讼、仲裁15笔 金额9.19亿元
- []新动态:家居丨黄光裕减持国美零售1.4334亿股股份 累计套现1631.21万港元
- []中捷精工:公司全资子公司专业从事压铸产品的研发、生产和销售
- []热点聚焦:财面儿|新希望五新实业拟发行10亿元中票 申购区间3.5%-5.0%
- []全球今日报丨中国海油上调产量目标和资本支出预算 2023年目标净产650-660百万桶油当量
- []当前速看:迪阿股份:截至2023年1月10日,公司股东户数为12,902户
- []蒙娜丽莎拟用10亿闲置资金进行委托理财 并开展15亿资金池业务
- []当前资讯!财面儿|德信中国:末期股息派付日更改为2023年11月30日或之前
- []当前快报:天地源拟定增募资12.5亿元 将用于项目建设及偿还金融机构借款
- []全球热头条丨中国国贸:公司设立数字化推进部议案获董事会决议通过
- []每日速读!股价不合规 箩筐技术(LKCO.US)面临退市风险
- []今日观点!建发物业:关于授出705万股限制性股份资料通函延期寄发
- []每日消息!舍得酒业:公司超高端产品“舍不得”已在局部市场圈层渠道试销,无年前举办相关发布会的计划
- []经络:香港12月份新取用按保数字连升2个月 创4个月新高
- []今天国际:公司订单交付数据将会在定期报告中汇总披露
- []天天热头条丨中原:经纪人指数CSI(住宅售价)升穿50点 预示楼价将止跌回稳
- []世界讯息:康跃科技:目前公司主营业务为医药制造业
- []【时快讯】施耐德电气:直流配电加速发展,需用好“敏捷创新”的利器
- []天天观速讯丨央行广州分行:2022年12月末广东本外币贷款余额为24.57万亿
- []5GW!明阳高效异质结电池和组件实现“双下线、双投产”
- []【世界报资讯】安源煤业:公司截至2023年1月10日股东总数为62122户
- []面对春节期间的美食大餐,控住不住自己怎么办?肚痛腹泻缠着你!
- []感染XBB.1.5要囤纸尿裤?大可不必!担心腹泻可适量备好和胃整肠丸
- []南昌举办金融支持房地产业发展推进会 预计提供签约授信355亿元
- []【速看料】港股餐饮板块集体下跌 海底捞跌超6%
- []天天微头条丨南宁百货:公司申请免税品经营资质目前仍无新进展,暂无明确的具体时间规划,能否取得该资质存在不确定性
- []每日热文:欧圣电气:截止2023年1月10日收盘公司股东人数15599户
- []环球观察:桃李面包业绩快报:2022年净利润6.48亿元 同比下降15%
- []环球热点评!豫园股份:控股股东复星高科技质押约3.1亿股 占公司总股本7.96%
- []【聚看点】派克新材:公司产品供应C919大飞机
- []全球快看:“末日博士”看涨未来五年金价,称每年能涨10%!背后都有哪些原因?
- []天天最资讯丨黄金市场分析:若跌破1865美元,将挑战1850美元的心理位
- []美原油交易策略:API原油库存意外猛增,关注EIA数据
- []【世界播资讯】国际金价逼近1890,美国CPI料续走弱,黄金或被严重低估
- []环球新消息丨巴克莱警告:若全球制造业放缓,2023年油价或下跌15-25美元!
- []当前时讯:上海商业地产蓄势修复,2023年需求回暖趋势可期
- []1月11日东尼电子涨停分析:苹果产业链,无线耳机,手机产业链概念热股
- B站注册资本增幅400%至5亿 目前由陈睿全资持股
- 光源资本出任独家财务顾问 沐曦集成电路10亿元A轮融资宣告完成
- 巨轮智能2021年上半年营收11.24亿元 期内研发费用投入增长19.05%
- 红枣期货尾盘拉升大涨近6% 目前红枣市场总库存约30万吨
- 嘉银金科发布2021年Q2财报 期内净利润达1.27亿元同比增长208%
- 成都银行2021上半年净利33.89亿元 期内实现营收同比增长17.27亿元
- 汽车之家发布2021年第二季度业绩 期内新能源汽车品牌收入增长238%
- 中信银行上半年实现净利润290.31亿元 期末不良贷款余额706.82亿元
- 光伏概念掀起涨停潮交易价格创新高 全天成交额达1.29亿元
- 上半年生物药大增45% 关键财务指标好转营收账款持续下降
- 全球今日报丨去年卖地收入少了两万亿! 今年“土地财政”何去何从?
- 焦点快播:1月11日中天服务涨停分析:物业管理,直播/短视频概念热股
- 武汉办公楼租金和空置率趋于回稳
- 每日速看!1月11日陕西黑猫涨停分析:煤炭,甲醇,煤化工概念热股
- 天天热推荐:1月11日楚天龙涨停分析:eSIM,电子身份证,车联网概念热股
- 净利连降三年,招商蛇口酝酿变局
- 华联控股:华联南山A区更新项目申报工作正在进行中
- 环球今头条!板块异动 | 银行业将助力优质房企改善现金流 房地产板块持续拉升
- 天天消息!5至8年进入储能行业第一方阵!永泰能源转型加速!
- 全球热文:上汽集团2022年新能源汽车及海外市场销量双双破百万辆
- 焦点热讯:2022年中国储能锂电池出货量达130GWh
- 扩充锂矿资源储备!天齐锂业拟斥资6.32亿在澳洲买矿
- 当前热议!2.68GW/6.67GWh!12月储能中标项目分析
- 世界今热点:“旅连连年度企业会员荣誉榜”揭晓丨旅连连2周年特别策划
- 天天新资讯:旅游大住宿新时代,我们需要什么样的酒旅榜单?
- 2023基金还能“无脑买就赚”?超7亿基民咋办?收好这条核心策略 两大方案任您选
- 天天看点:两会代表徐晓亮:在旅游业复苏的风口,要打造本土文旅IP
- 百事通!华泰证券(06886.HK)成功发行40亿元公司债
- 环球关注:认购热情持续升温! 多只主动权益类基金“开门迎客”
- 机构策略:沪指3130点上方谨慎看多 以左侧布局为主
- 回收白银多少钱一克(2023年1月11日)
- 今日播报!港龙中国:2022年合同销售额约130.04亿元 同比下降56.71%
- 禹洲集团:去年累计销售额356.06亿元
- 凯莱英:CDMO在提高创新药研发效率、加速新药上市和降低商业化上市新药的生产成本方面优势明显
- 央行:2022年人民币存款增加26.26万亿元 同比多增6.59万亿元
- 即时:明星私募展望2023年投资:一个值得期待的“双击之年”
- 川润股份:截至2023年1月10日公司股东户数为79,984户
- 环球新消息丨中国金茂:2022年累计销售额1550亿元 销售面积779.53万平方米
- 【时快讯】远洋集团:去年销售额约1002.9亿元
- 简讯:联得装备:公司的经营情况将会在定期报告中进行披露
- 湖南省冷水江市召开10GWH锂电子动力&储能电池产业园项目洽谈会
- 环球头条:中金2023年展望被动元器件:供给扩张 消费电子和新能源需求共振
- 热推荐:东北证券邓利军:消费赔率与胜率较高 低位布局正当时
- 当前观点:逾400只基金告别“不败战绩”!连续5年正收益 这4只主动权益基金做到了
- 扎堆消费类定增 公募钟情困境反转细分行业
- 国家发改委:鼓励直接参与电力市场,缩小代理购电用户范围
- 天天热文:旅游“暖阳”:旅行社加班定制路线,老板喊话员工“归队”
- 环球滚动:家居丨正泰电器:南存辉辞任公司总裁 张智寰接任
- 当前资讯!家居丨奥普家居:约2.66亿股限售股解除限售 将于1月16日起上市流通
- 【天天报资讯】财面儿丨中国金茂2022年1-12月累计取得签约销售额1550亿元
- 当前短讯!淮河能源:根据中登公司最近一期发送的股东名册,本公司的股东总数为49,440户
- 天天短讯!财面儿丨大悦城子公司出售深圳宝安区9区共5套商业房地产 底价6981.95万元
- 福星股份增发方案藏蹊跷 定向增发后开发资金仍存缺口?
- 天天微速讯:甘李药业:目前公司自主研发的甘精、赖脯以及门冬三款胰岛素在欧美两地的申报工作仍按计划正常推进中
- 【全球快播报】主动权益基金去年四季报登场:基金乐观看待后市 股票仓位进一步提高
- 当前简讯:世行下调全球经济增长预期,警告经济衰退!黄金价格逼近1900美元
- 热资讯!H5小游戏是什么意思?几款有意思的html游戏推荐
- 全球讯息:如何安装HERO的root权限?Sprint HTC Hero(Hero 200)获取ROOT权限
- 世界即时看!58岁库兹马晒性感肌肉照 网友:珍妮阿姨看傻了
- 天天速递!重师计算机专业收分 2019年重庆师范大学计算机与信息科学学院录取分数线
- 一加仑等于多少升一升多少斤?容积单位换算公制
- 【环球报资讯】游戏设计有什么技巧?5个简单的游戏设计技巧
- 世界快资讯丨詹姆斯说库里得MVP 附加赛胜利属于湖人
- 天天新动态:7款功能最强大的免费杀毒软件 你用过几个?
- 郑州轻工业大学易斯顿美术学院 郑州轻工业大学是几本?
- 世界热议:为什么我玩穿越火线进不去?穿越火线重启客户端的解决方法
- 过滤王服务端程序与控制台如何连接?连接方法步骤
- 快讯:台式机电脑电源供电不足怎么办?有哪些故障现象?
- 全球简讯:智能手环有哪些推荐?智能手环排行榜前十名
- 【新要闻】Windows 10开始菜单打不开点击无反应怎么办?解决办法如下
- 天天资讯:2021山东高考成绩查询时间公布 高考成绩查询通道
- 寇组词有哪些?寇的拼音是什么?
- 梁子湖有哪些好玩的地方?梁子湖旅游攻略
- 结构体定义:struct与typedef struct 用法详解
- 【独家】POWER BI:服务器端全套部署 服务器端安装SQLSERVER2017(X64)
- 焦点简讯:诺基亚e900怎么样?参数配置如何?
- 琵琶顶部弦轴的作用 琵琶顶部的炫轴有什么用?
- 天天播报:《艾米丽在巴黎》第二季拍摄 女神被淋到五官扭曲
- 当前滚动:物联网系统的投资回报率是多少?物联网系统开发的11个步骤
- 阿里云原生数据库系统:机遇与挑战(附下载)
- 全球百事通!DNF更新卡住怎么办?选择角色进入游戏后卡住的解决方法
- 重点单位消防安全如何管理?重点单位消防安全“户籍化”管理系统上线啦
- 低配置电脑如何设置OBS?obs推流编码在哪设置?
- 全球今热点:JRebel热部署插件有什么用?JRebel热部署插件评测
- 速看:皇室战争宝箱顺序是什么?皇室战争攻略
- 环球新消息丨12生肖传奇电视剧有哪些?12生肖的成语你知道多少?
- 环球百事通:【蓝拳武器幻化】45级紫战斧强烈推荐
- 天天关注:视婚姻如儿戏!赵丽颖、冯绍峰官宣离婚
- 环球短讯!安恒信息(688023)1月10日主力资金净卖出3733.25万元
- 最新资讯:《四平青年》讲述了什么故事?《四平青年》故事梗概
- 全球简讯:自动称重系统是什么?自动称重系统怎么应用?
- 环球百事通!多少分能上诸暨市第二高级中学?诸暨市第二高级中学录取分数线公布
- 世界球精选!丹东住宿26元 青山沟在丹东市宽甸镇的住宿推荐
- 全球快消息!微博密友怎么设置?微博密友设置方法
- 触电歌词表情包有哪些?触电的歌词是什么?
- 每日头条!周笔畅的笔记你还记得吗?周笔畅笔记歌词完整版
- 焦点资讯:滚犊子什么意思?滚犊子的解释
- 政策利好频发 房企流动性紧张趋缓
- 1月11日重点数据和大事件前瞻
- 环球快看:董希淼专栏丨首套住房贷款利率下限调整的逻辑
- 【世界新视野】17.84万亿! 去年住户新增存款涨80.2%
- 环球微动态丨北京二手房市场回暖明显:成交上涌 议价空间缩小
- 中原建业集中签约27个代建项目 总合约建筑面积354.43万平方米
- 热头条丨超e保是什么保险
- 威迈斯将科创板上会:2022年上半年营收15亿元,多项业务收入下滑
- 全球头条:低保户可以买车吗,不可以
- 环球观点:深业物业递表证监会 一家深圳国资物企的分拆之路
- 风险控制与投保规则
- 社保卡能在手机上激活吗,实体卡不能
- 离职后多久可以提取公积金,一个月左右