赞
踩
目录
最近因为公司变化;要求把以前在百度云上的音视频文件和文档迁移到阿里云环境下。因为本人被分派了此任务要求把百度云账号(2个)、其中一个账号直接下载文件;另外一个账号需要按照系统下载文件。于是我想到写了一个独立的SpringBoot程序,因为涉及文件众多;其中一个账号多达230G文件;另外一个账号文件涉及多达850G。于是乎需要写一个程序多台机器进行下载;并且要求支持按照分页下载。最后使用3台计算机;让运维人员针对此三台计算机进行分配 固定大带宽 。举例一下:无论是在百度云上以视频管理的分页还是按照系统下载的分页下载。
机器A上 下载 1-30页
机器B上 下载31-60页
机器C上 下载61-100页
这样三台机器可以同时分开下载;同时拥有固定带宽;这样基础硬件条件准备好了。于是需要在程序之中把相关配置写到配置文件之中,获得当前下载类型、同时启动完毕SpringBoot后直接调用对应的下载程序下载文件即可。
在spring框架中,是无法在普通类中通过注解注入实例的,因为sping框架在启动的时候,就会将标明交给spring容器管理的类进行实例化,并梳理他们彼此的依赖关系,进行注入,没有交给spring容器管理的普通类,是不会进行注入的,即使你使用了注入的相关注解。这个时候,如果我们需要在普通类中获取spring容器中的实例,就需要一些特定的方法。
- import org.springframework.context.ConfigurableApplicationContext;
-
- public class BeanUtil {
- //将管理上下文的applicationContext设置成静态变量,供全局调用
- public static ConfigurableApplicationContext applicationContext;
- //定义一个获取已经实例化bean的方法
- public static <T> T getBean(Class<T> c){
- return applicationContext.getBean(c);
- }
- }
Application类之中如何通过 applicationContext 获得bean
- @SpringBootApplication( exclude = { DataSourceAutoConfiguration.class } )
- @ComponentScan( basePackages = { "com.wdcloud.publiccloud.files.tool" } )
- @ServletComponentScan
- public class PublicCloudFilesMigrationToolsApplication {
- private static Logger logger = LoggerFactory.getLogger( PublicCloudFilesMigrationToolsApplication.class );
-
- public static void main( String[] args ) throws IOException
- {
- /* run方法的返回值ConfigurableApplicationContext继承了ApplicationContext上下文接口 */
- ConfigurableApplicationContext applicationContext = SpringApplication.run( PublicCloudFilesMigrationToolsApplication.class, args );
- /* 将run方法的返回值赋值给工具类中的静态变量 */
- BeanUtil.applicationContext = applicationContext;
- System.out.println( "currentOperateType " + currentOperateType );
- switch ( currentOperateType )
- {
- case "video":
- logger.info( "主程序启动完毕 进入下载视频调用 " );
- runDownloadVodFileBySystem();
- break;
- }
- }
-
- /* 调用 注意Application是我们SpringBoot的启动类 */
- public static void runDownloadVodFileBySystem()
- {
- /* 测试获取已经实例化的接口bean,执行bean中方法 */
- DownloadVodMediaByAppSystem downloadVodMediaByAppSystem = BeanUtil.getBean( DownloadVodMediaByAppSystem.class );
- downloadVodMediaByAppSystem.downloadVodMeidaAppSystemPageList(
- downloadStartPage, downloadEndPage,
- pageSize, ownerCompany, fileFormat,
- downloadStartTime, downloadEndTime, pageStartIndex, pageEndIndex );
- }
- }
application-prod.properties 之中的文件信息
- #当前的企业id **大学 10001 宁波江北区考试系统 10015
- ownerCompany=10011
*Application.java之中代码获得配置信息
- //从配置文件之中读取
- private static String ownerCompany;
- @Value("${ownerCompany}")
- public void setOwnerCompany(String ownerCompany) {
- this.ownerCompany = ownerCompany;
- }
-
- //下载总文件数量
- private static int downloadFileTotal;
- @Value("${downloadFileTotal}")
- public void setDownloadFileTotal(int downloadFileTotal) {
- this.downloadFileTotal = downloadFileTotal;
- }
-
- private static int downloadStartPage;
- @Value("${downloadStartPage}")
- public void setDownloadStartPage(int downloadStartPage) {
- this.downloadStartPage = downloadStartPage;
- }
-
- private static int downloadEndPage;
- @Value("${downloadEndPage}")
- public void setDownloadEndPage(int downloadEndPage) {
- this.downloadEndPage = downloadEndPage;
- }
-
- private static int pageSize;
- @Value("${pageSize}")
- public void setPageSize(int pageSize) {
- this.pageSize = pageSize;
- }
本文主要是结合实际之中在SpringBoot应用之中如何获得Bean对象;然后通过Bean对象直接调用对应的方法执行。
同时在Application类之中如果获得配置文件之中的信息。在启动应用的时候要获得信息,需要把配置信息变量定义为static类型同时使用set方式赋值。如下图所示:
- //从配置文件之中读取
- private static String ownerCompany;
- @Value("${ownerCompany}")
- public void setOwnerCompany(String ownerCompany) {
- this.ownerCompany = ownerCompany;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。